Python-函数,,函数形参和实参函数语


函数

形参和实参

函数语句块中第一句是函数的说明username是形参liyihang是实参In[1]:
def greet_hello(username):    """显示简单的问候语"""    print("hello," + username.title() + "!")greet_hello("liyihang")
hello,Liyihang!

传递实参

位置实参

基于实参的顺序来关联如下一个显示宠物信息的函数In[4]:
def pet(type, name):    """显示宠物信息"""    print("我有一只" + type + ",它的名字叫" + name.title())pet("狗", "小黄")
我有一只狗,它的名字叫小黄
使用位置实参传递,如果顺序不对可能会导致意想不到的结果In[3]:
def pet(type, name):    """显示宠物信息"""    print("我有一只" + type + ",它的名字叫" + name.title())pet("小黄", "狗")
我有一只小黄,它的名字叫狗

关键字实参

关键字实参是在实参中将参数和值关联起来了,因此不会混淆关键字实参无需考虑函数调用中的实参顺序In[5]:
def pet(type, name):    """显示宠物信息"""    print("我有一只" + type + ",它的名字叫" + name.title())    pet(name="小黄", type="狗狗")
我有一只狗狗,它的名字叫小黄

默认值

给函数形参指定默认值调用函数时指定了新实参值就使用新值未指定新值就使用默认值注意:定义函数时,需要把没有有默认值的形参放到有默认值形参前面In[8]:
def pet(name, type="狗"):    """显示宠物信息"""    print("我有一只" + type + ",它的名字叫" + name.title())    pet(name="小黄", type="猫")
我有一只猫,它的名字叫小黄

返回值

返回简单值

In[9]:
def get_formatted_name(first_name, last_name):    """返回整洁的姓名(姓和名首字母大写,并在中间加上一个空格)"""    full_name = first_name + " " + last_name    return full_name.title()liyihang = get_formatted_name(‘li‘, ‘yihang‘)print(liyihang)
Li Yihang

可选实参

升级上面的返回简单姓名函数当调用该函数时,实参中姓名出现三个部分,怎么处理?首先定义函数时增加一个middle_name,然后给middle_name指定一个默认值在函数主体中判断实参中是否给出了middle_nameIn[23]:
def get_formatted_name(first_name, last_name, middle_name=‘‘):    """返回整洁的姓名(姓和名首字母大写,并在中间加上一个空格)"""    if middle_name:        full_name = first_name + ‘ ‘ + middle_name + ‘ ‘ + last_name    else:        full_name = first_name + ‘ ‘ + last_name    return full_name.title()a = get_formatted_name(‘li‘, ‘yihang‘)print(a)b = get_formatted_name(first_name=‘li‘, middle_name=‘yi‘, last_name=‘hang‘)print(b)
Li YihangLi Yi Hang

返回字典

函数可返回任何类型的值包括列表和字典等数据结构In[]:
def get_person(name, sex, age):    """返回一个包含人信息的字典"""    person = {‘name‘:name, ‘sex‘:sex, ‘age‘:age}    return personzhangsan = get_person(‘zhangsan‘, ‘man‘, 18)print(zhangsan)

函数结合while循环使用

定义一个函数,获取用户输入的姓名,并格式化输出他们使用while循环无限重复操作,直到输入q退出In[4]:
def get_formatted_name(first_name, last_name):    full_name = first_name + ‘ ‘ + last_name    return full_name.title()while True:    print(‘input your name:‘)    print(‘enter q to quit‘)        f_name = input("first name:")    if f_name == ‘q‘:        break    l_name = input("last_name:")    if l_name == ‘q‘:        break        formatted_name = get_formatted_name(f_name, l_name)    print("hello, " + formatted_name + "!")        
input your name:enter q to quitfirst name:lilast_name:yihanghello, Li Yihang!input your name:enter q to quitfirst name:q

传递列表实参

定义一个函数,调用它并传递一个列表作为实参In[5]:
def greet_user(names):    """想列表中的每一位用户发出问候"""    for name in names:        msg = "Hello," + name.title() + "!"        print(msg)        names = [‘liyihang‘, ‘caijiasheng‘, ‘jieer‘]greet_user(names)
Hello,Liyihang!Hello,Caijiasheng!Hello,Jieer!

在函数中修改列表

一家3D打印公司,需要打印的设计储存在一个列表中,打印完以后储存在另一个列表中定义两个函数,一个打印功能,一个显示打印了那些设计功能In[15]:
def print_models(unprinted_designs, completed_models):    """    打印每个设计,知道打印完为止    每个设计打印完成后,都添加到completed列表中    """    while unprinted_designs:        current_designs = unprinted_designs.pop()        print("正在打印设计:" + current_designs)        completed_models.append(current_designs)def show_completed_models(completed_models):    """显示所有打印好的设计"""    print(‘\n‘)    print("这些设计已经被打印好了:")    for completed_model in completed_models:        print(completed_model)unprinted_designs = [‘iphone‘, ‘ipad‘, ‘itouch‘, ‘ipod‘]completed_models = []print_models(unprinted_designs, completed_models)show_completed_models(completed_models)
正在打印设计:ipod正在打印设计:itouch正在打印设计:ipad正在打印设计:iphone这些设计已经被打印好了:ipoditouchipadiphone

禁止函数修改列表

在上面的函数中,每打印一次设计,就会删除掉unprinted列表中的元素如果想保留unprinted列表中的内容,不对其做修改可以使用切片方法在实参中传递列表的副本注意:如果没有必要,直接传入列表而不是它的副本因为创建副本需要时间,特别是大数据处理的时候,影响效率In[]:
print_models(unprinted_designs[:], completed_models)

传递任意数量的实参

预先不知道有多少个实参的情况下制作一个披萨,预先不知道要多少种配料In[19]:
def make_pizza(*toppings):    """制作披萨"""    print("\n用以下配料制作披萨:")    for topping in toppings:        print(topping)        make_pizza("面饼")make_pizza("面饼", "芝士", "牛肉")
用以下配料制作披萨:面饼用以下配料制作披萨:面饼芝士牛肉

导入函数

导入函数时,最好清晰明了的写出导入了什么模块的什么函数In[]:
from xxx.py import xxx
导入函数时,可以自定义导入函数名,避免出现同名函数导致程序出错In[]:
from xxx.py import xxx as xxx

Python-函数

评论关闭