定义函数
def greet_user():
print("Hello!")
greet_user()
使用def关键字定义函数。
向函数传递信息
函数定义时可以接受参数:
def greet_user(username):
print("Hello,", + username.title() + "!")
greet_user('jesse')
实参和形参
在函数greet_user(username)中username是形参,在代码greet_user('jesse')中,'jesse'是一个实参。
传递实参
位置实参
比如下面的函数:
def describe_pet(animal_type, pet_name):
do something
describe_pet('hamster', 'harry')
动物类型'hamster'传入实参animal_type,动物名字'harry'传入pet_name,这按照实参的顺序传递。
关键字实参
可以在调用函数时使用形参确定要传递的参数是什么,这时候就无所谓顺序了:
describe_pet( pet_name='harry', animal_type='hamster')
默认值
编写函数时,可以为形参指定默认值:
def describe_pet(pet_name, animal_type='dog'):
do something
describe_pet('willie')
调用该函数时可以省略传入默认形参的实参。
返回值
定义函数时用return返回值。
返回简单值
def get_formatted_name(first_name, last_name):
full_name = first_name + ' ' + 'last_name'
return full_name.title()
musician = get_formatted_name('jimi', 'hendrix')
返回字典
函数可以返回任何值,包括列表、元组和字典:
def build_person(first_name, last_name):
person = {'first': 'first_name', 'last': 'last_name'}
return person
传递列表
函数可以接受列表作为参数:
def greet_users(names):
for name in names:
msg = "Hello," + name.title() + ''!'
print(msg)
usernames = ['hannah', 'ty', 'margot']
greet_users(usernames)
函数修改列表
注意,如果直接传入列表作为函数参数的话,在函数中就会直接修改该列表。
函数不修改列表
greet_users(usernames[:])
如果传入列表副本作为参数的话就不会修改原列表了。
传递任意数量实参
Python允许从调用语句中收集任意数量的参数。如下:
def make_pizza(*toppings):
print(toppings)
make_pizza('mushrooms', 'green peppers', 'extra cheese')
形参名*toppings中的星号让python创建一个名为toppings的空元组,然后会将受到的参数传到这个元组中。
结合使用位置实参和任意数量实参
要这么使用的话,必须将任意数量实参的形参放在最后,Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中:
def make_pizza(size, *toppings):
do something
make_pizza(16, 'mushrooms', 'green peppers', 'extra cheese')
使用任意数量的关键字实参
可以将函数编写成能够接受任意数量的键值对,调用语句提供多少就接受多少:
def build_profile(first, last, **user_info):
do something
for key, value in user_info.items():
do something
形参**user_info创建一个名为user_info的字典,并接受所有键值对,可以这么调用函数:
build_profile('albert', 'einstein', location='princeton', field='physics')
网友评论