定义函数的一般格式:
det function():
statements
return a
return用于退出函数,向调用方返回一个表达式
函数可以不设置参数,也可以设置参数:
def function1(): print(\'大湘菜\') def function2(a): print(a) function1() function2(\'小湘菜\')
结果为:
大湘菜
小湘菜
python传递不可变对象,会生成一个新对象:
def change(a): print(id(a)) a = 2 print(id(a)) a = 1 print(id(a)) change(a)
结果为:
1460124477744 1460124477744 1460124478032
python传递可变对象,指向的是同一个对象:
def change(a): print(id(a)) a.append(4) print(id(a)) a = [1, 2, 3] print(id(a)) change(a)
结果为:
1874883986496 1874883986496 1874883986496
参数类型
1、必须参数:
def myprint(a): print(a) myprint(\'大湘菜\')
结果为:
大湘菜
2、关键字参数,允许调用的参数顺序和声明时不一致:
def myprint(name, age): print(\'我的名字是\' + name + \',年龄是\' + age + \'岁。\') myprint(age=\'18\', name=\'大湘菜\')
结果为:
名字是大湘菜,年龄是18岁。
3、默认参数,如果没有参数传递,使用默认参数:
def myprint(name, age=\'18\'): print(\'我的名字是\' + name + \',年龄是\' + age + \'岁。\') myprint(\'大湘菜\') myprint(\'小湘菜\', \'81\')
结果为:
我的名字是大湘菜,年龄是18岁。
我的名字是小湘菜,年龄是81岁。
4、不定长参数,加了*,指的是函数比初声明时使用了更多的参数,会以元组的形式存入:
def myprint(name, *otherinfo): print(\'我的名字是\' + name) print(otherinfo) myprint(\'大湘菜\') myprint(\'大湘菜\', 1, 2, 3)
结果为:
我的名字是大湘菜
()
我的名字是大湘菜
(1, 2, 3)
加了**的参数会以字典的形式导入
声明函数时,*可以单独出现,但是*后的参数必须用关键字传入:
def myprint(name, *, age): print(\'我的名字是\' + name) print(\'我的年龄是\' + age) myprint(\'大湘菜\', age=\'18\')
结果为:
我的名字是大湘菜
我的年龄是18
匿名函数
一般形式:
lamda arg1, arg2…: expression
lamda的主体是一个表达式,而不是一个代码块。lamda拥有自己的命名空间,不能访问全局命名空间的参数
info = lambda name, age: \'姓名为\' + name + \',年龄为\' + age print(info(\'大湘菜\', \'18\'))
结果为:
姓名为大湘菜,年龄为18
可以把匿名函数封装到函数内:
def info(): return lambda name, age: \'姓名为\' + name + \',年龄为\' + age returnFunction = info() # 返回lamda匿名函数 print(returnFunction(\'大湘菜\', \'18\'))
结果为:
姓名为大湘菜,年龄为18
强制位置参数
函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式
来源:https://www.cnblogs.com/daxiangcai/p/16163763.html
本站部分图文来源于网络,如有侵权请联系删除。