定义函数的一般格式:
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
强制位置参数
函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python函数 - Python技术站