Python:函数

2020-07-24  本文已影响0人  Dragon_boy

定义函数

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')
上一篇 下一篇

猜你喜欢

热点阅读