函数的学习1——定义函数&传递实参——参考Python编程从入门到实践

定义函数

def greet_user():
    print("Hello")


greet_user()    # PEP8 函数和类的定义后空两行

1. 向函数传递参数

def greet_user(username):
    print("Hello, " + username.title() + "!")


greet_user('ges')

2. 实参和形参

函数定义时括号中的变量称之为形参,eg: username;函数调用时括号中的值或变量成为实参,eg: ges‘。

函数调用时将实参值传递给形参,运行函数体。

传递实参

1. 位置实参

函数调用时,将函数调用中的每个实参都关联到函数定义中的一个形参,基于实参顺序的关联方式——位置实参。

def describe_pet(animal_type, pet_name):
    print("\nI have a " + animal_type + '.')
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")


describe_pet('dog', 'pipi')

运行结果:

I have a dog.
My dog's name is Pipi.

位置实参:函数调用时自动将从左往右的第一个实参传递给第一个形参,第二个实参传递给第二个形参,依次。。。

  • 函数可以多次调用:为提高工作效率,定义一个函数之后,可以多次调用,只需使用不同的实参即可。
  • 注意实参的顺序:实参的顺序应与形参的顺序一致,不然会闹出笑话。

2. 关键字实参

describe_pet(animal_type='dog', pet_name='pipi')
describe_pet(pet_name='pipi', animal_type='dog')

 上述两条函数调用代码的运行结果完全一样。

传递给形参名称-值对,函数调用时就无需考虑实参顺序。

3. 默认值

def describe_pet(pet_name, animal_type='dog'):
    print("\nI have a " + animal_type + '.')
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")


describe_pet(pet_name='wangwang')    # 使用默认值
describe_pet('wangwang')    # 使用默认值 & 位置实参
describe_pet(pet_name='mimi', animal_type='cat')    # 忽略形参的默认值,传递新的实参值

运行结果:

I have a dog.
My dog's name is Wangwang.

I have a dog.
My dog's name is Wangwang.

I have a cat.
My cat's name is Mimi.

4. 等效函数调用

可混合使用位置实参、关键字实参和默认值,形成了多种运行结果一致的函数调用方式——简称等效函数调用。

5. 避免实参错误

def describe_pet(pet_name, animal_type):
    print("\nI have a " + animal_type + '.')
    print("My " + animal_type + "'s name is " + pet_name.title() + ".")


describe_pet()

 运行结果:

Traceback (most recent call last):
  File "C:\Users\yxf\Desktop\python_pycharm\test_def.py", line 6, in <module>
    describe_pet()
TypeError: describe_pet() missing 2 required positional arguments: 'pet_name' and 'animal_type'

实参和形参不匹配时,运行报错信息会有详细信息,根据提示信息修改代码即可。

 

点赞