Python入坑笔记(五):函数
函数定义
使用def定义一个函数:
def greet():
print("hello")
greet()
outputs:
hello
参数
python向函数传递参数的方式有很多种,有位置实参、关键字实参,还可以传递列表和字典。
位置实参
基于实参的顺序,每个实参与对应的形参关联,这样的方式叫做位置实参。
def pets(type, name):
print("I hava a " + type)
print("It's name is " + name)
pets("pig","Peggy")
outputs:
I hava a pig
It's name is Peggy
根据传入实参的顺序,通过形参获取到传入的值。
关键字实参
关键字实参将名称-值这样的参数对传递给函数,名称与值直接关联,因此不必考虑传入的顺序。
def pets(type, name):
print("I hava a " + type)
print("It's name is " + name)
pets(name="Peggy",type="pig")
outputs:
I hava a pig
It's name is Peggy
参数默认值
在函数定义中,可以给每个形参指定默认值,如果在调用函数时传入了对应的实参,则函数中会使用传入的实参值,否则,使用该参数的默认值。
def pets(name, type="dog"):
print("I hava a " + type)
print("It's name is " + name)
pets("Peggy")
outputs:
I hava a dog
It's name is Peggy
注意:参数定义中,有默认值的参数的位置必须在无默认值的参数之后。默认参数必须指向不变对象!
传递任意数量的实参
如果预先不知道函数需要接受多少个实参,Python允许函数从调用语句中接收任意数量的实参。在形参定义时前面加一个*号,它会创建一个空元组,用来接收所有的参数值。比如def fun(*params),会创建一个名为params的 空元组,将接收到的所有值封装进去。
def pets(*types):
for pet in types:
print(pet)
pets("dog", "cat", "monkey")
outputs:
dog
cat
monkey
传递任意数量的关键字实参
Python函数还可以接收任意数量的关键字实参,即任意数量的键值对。任意数量的关键字实参用**定义,Python会创建一个字典保存所接收到的所有关键字实参。比如def func(**kvs),会创建一个名为kvs的字典,接收所有的关键字实参。
def user_info(**info):
for k,v in info.items():
print(k + " is " + str(v))
user_info(name='Tom', age=21, location='Chongqing')
outputs:
name is Tom
age is 21
location is Chongqing
注意
- 参数定义顺序:必选参数、默认参数、可变参数、可变关键字参数
- 默认参数必须指向不变对象
- 给形参指定默认值时,等号两边不要有空格
返回值
函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。用return语句返回。
def get_sum(a, b):
return a+b
sum = get_sum(1,2)
print(sum)
output:
3
传递列表
有时候需要将列表作为参数传递给函数,更方便的操作列表。列表传递给函数后,函数能直接访问它的内容,注意,函数中对列表的修改是永久性的。
def check(users):
while users:
user = users.pop()
print(user+" checked!")
users = ["Tom", "Jhon", "Edward"]
check(users)
print("last: "+ str(len(users)))
outputs:
Edward checked!
Jhon checked!
Tom checked!
last: 0
禁止函数修改列表
Python提供了对列表的切片操作符:,比如有一个列表L,那么L[0:3]表示,在列表L中从索引0开始,取到索引3但不包括索引3,取出包含这三个元素的列表副本。
在传入函数的实参列表,这样使用切片[:],就可以将列表的完整副本传入函数中,这样函数对列表的操作就不会影响到原始列表。
def check(users):
while users:
user = users.pop()
print(user+" checked!")
users = ["Tom", "Jhon", "Edward"]
check(users[:])
print("last: "+ str(len(users)))
outputs:
Edward checked!
Jhon checked!
Tom checked!
last: 3