码迷,mamicode.com
首页 > 编程语言 > 详细

Python-函数

时间:2018-03-26 19:20:44      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:==   last   判断   影响   增加   指定   out   输入   gpo   

函数

 

形参和实参

  • 函数语句块中第一句是函数的说明
  • 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_name
In [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 Yihang
Li Yi Hang
 

返回字典

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

zhangsan = 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 quit
first name:li
last_name:yihang
hello, Li Yihang!
input your name:
enter q to quit
first 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


这些设计已经被打印好了:
ipod
itouch
ipad
iphone
 

禁止函数修改列表

  • 在上面的函数中,每打印一次设计,就会删除掉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-函数

标签:==   last   判断   影响   增加   指定   out   输入   gpo   

原文地址:https://www.cnblogs.com/Alex-Hang/p/8652459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!