python函数学习笔记

一、定义函数

1、定义函数

使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后在缩进块中编写函数体,函数的返回值用return语句返回。

def jia(a,b):
    n=a+b
    return n
print(jia(1,2))
2、空函数

实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

def empty():
    pass
3、参数类型检查--内置函数isinstance(),举例:
def jia(a,b):
    if not isinstance(a,(int,float)):
        raise TypeError('a is wrong type')
    if not isinstance(b,(int,float)):
        raise TypeError('b is wrong type')
    n=a+b
    return(n)
print(jia('1',1))

小结:函数执行完毕也没有return语句时,自动return None。
函数可以同时返回多个值,但其实就是一个tuple。

二、函数的参数

1、位置参数(明确规定函数需要几个参数)
def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
2、默认参数(在位置参数的基础上,为了以防调用是某个参数输入值需要重复或缺失)

也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。
默认参数必须指向不变对象!

def fang(x,n=2):
    s=1
    while n>0:
        s=s*x
        n=n-1   
    return s
print(fang(5,3))
3、可变参数

参数前加*号,可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple

#计算一组数字的平方和
def fang_he(*numbers):
    s=0
    for n in numbers:
        s=s+n*n
    return s
#print(fang_he([1,2,3]))  函数设置成可变参数时不能传入list或tuple列表,否则会报错
print(fang_he(1,2,3))
num=[1,3,5,7]
print(fang_he(*num))##参数前加*号,*num表示把num这个list的所有元素作为可变参数传进去
4、关键字参数

参数前加**号,关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name,age,**info):
    print('name:',name,'age:',age,'other:',info)
person('Adam', 45, gender='M', job='Engineer')
dw={'city':'shenzheng','job':'test engneer'}
person('almira',27,**dw)#**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**info参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
5、命名关键字参数

限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数

def person(name, age, *, city, job):##关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数,定义时缺少*,Python解释器将无法识别位置参数和命名关键字参数
    print(name, age, city, job)
person('Jack', 24, city='Beijing', job='Engineer')
##如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*
def person(name, age, *args, city, job):
    print(name, age, args, city, job)
##调用时缺少参数名,python解释器会把参数均视为位置参数
6、参数组合(再议)

三、递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A、B、C中第1个柱子A的盘子数量,

然后打印出把所有盘子从A借助B移动到C的方法(汉诺塔的移动圆盘叠放必须是小盖大)

def move(n,a,b,c):
    if n==1:
        print(a,'---->',c)
    else:
        move(n-1,a,c,b) #借助C柱,将A柱上的n-1个圆盘移动到B柱
        print(a,'---->',c) #将第n个移动到C
        move(n-1,b,a,c)#借助A柱,将B 柱上的圆盘移到C柱
move(3,'A','B','C')

根据以下廖雪峰前辈文章学习记录:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容