1 函数的创建
python中的函数不需要指定返回值类型,也不需要指定参数类型,直接就可以在方法体中选择是否有返回值,自由得让人有点不适应。
- 示例
def function(a,b):
return a+b
2 函数的说明文档
在函数名的下一行用3个”写上注释,就可以成为函数的说明文档,可用help方法查看。
def add(a,b,c):
"""
求和函数
:param a:参数1
:param b: 参数2
:param c: 参数3
:return: 和
"""
return a+b+c
help(add)
add(a, b, c)
求和函数
:param a:参数1
:param b: 参数2
:param c: 参数3
:return: 和
3 在函数中修改全局变量
在函数中直接修改全局变量并不能改变全局变量,而只是在函数中新建了一个局部变量,如果需要在函数中修改全局变量,则需要使用global关键字表明改变量是全局变量。
'''
修改全局变量
'''
variable=10
def change():
global variable
variable=20
print(variable)
change()
print(variable)
10
20
4 多个返回值
当函数需要返回多个值的时候,我们可以返回多个值,这些值将自动组成一个元组。
def test():
return 1,2
result=test()
print(result)
(1, 2)
当然,我们也可以直接返回列表,或者集合、字典等存储了多个元素的的数据结构(实际上返回的是指向这些对象的引用变量)。
def test1():
return [1,3,4]
print(id(test1()))
print(test1())
1611109184456
[1, 3, 4]
5 函数中的四种参数
5.1 位置参数
位置参数:调⽤函数时根据函数定义的参数位置来传递参数。
位置参数也就是最普通的参数,不可以不传入,且传入参数的顺序需要与函数的形参对应。
#1.位置参数,位置参数的顺序不能乱
def show(name,sex,age):
print(f'名字是{name},性别是{sex},年龄是{age}')
show("张三","男",30)
名字是张三,性别是男,年龄是30
5.2 关键字参数
关键字参数:通过“键=值”形式加以指定。可以让函数更加清晰、容易使⽤,同时也清除了参数的顺序需求。
关键字参数必须要用形参名 加 = 加 实参 来传递,和键值对的含义很想,需要注意的是,关键字参数一定要在位置参数后面,且由于采用键和值一起输入的形式,关键字参数的顺序无关紧要。
def show(name,sex,age):
print(f'名字是{name},性别是{sex},年龄是{age}')
#2.关键字参数,关键字参数间不分先后顺序,但如果参数列表存在位置参数,则位置参数必须要在关键字参数前
show("李四",sex="女",age=34)
show("李五",age=23,sex="男")
名字是李四,性别是女,年龄是34
名字是李五,性别是男,年龄是23
5.3 缺省参数
缺省参数也叫默认参数,⽤于定义函数,为参数提供默认值,调⽤函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调⽤)。
def show(name,age,sex="男"):
print(f'name:{name},sex:{sex},age:{age}')
show("王五",23432)
show("王五",23432,sex="女")
name:王五,sex:男,age:23432
name:王五,sex:女,age:23432
5.4 不定长参数
不定⻓参数也叫可变参数。⽤于不确定调⽤的时候会传递多少个参数(不传参也可以)的场景。此时,可⽤包裹(packing)位置参数,或者包裹关键字参数,来进⾏参数传递,会显得⾮常⽅便。
5.4.1 包裹位置参数
包裹位置参数传递 ,接收所有位置参数,返回一个元组。参数前用一个*修饰。
def user_info(*args):
print(args)
user_info("张三")
user_info("张三",234)
user_info("张三",234,"男")
('张三',)
('张三', 234)
('张三', 234, '男')
5.4.2 包裹关键字参数
包裹关键字参数传递,收集所有关键字,返回一个字典。参数用两个**修饰。
def user_info(**kwargs):
for item in kwargs.items():
print(item,end=" ")
user_info(name="张三",sex="男",age="34")
('name', '张三') ('sex', '男') ('age', '34')
事实上,不论是包裹位置传递还是包裹关键字传递,都是一个组包的过程。