Python编程从入门到实践:CH8函数

定义函数

  • 使用关键字def来定义一个函数

  • 指出函数名

  • 括号内指出函数需要的信息

  • 定义以冒号结尾

  • 冒号后的缩进行构成了函数体

  • 函数中可使用""“文档字符串”""来描述函数功能

    def greet_user():
    	"""显示简单的问候语"""
    	print("Hello!")
    greet_user()
    
  • 向函数传递信息

    def greet_user(username):
    	"""显示简单的问候语"""
    	print("Hello, " + username.title() + "!")
    
  • 实参和形参

    • 函数定义时,传递的参数为形参
    • 函数调用时,实际使用的参数为实参

传递实参

  • 位置实参
    • 函数调用的实参的关联方式基于实参的顺序
    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('hamster', 'harry')
    
    • 可以调用函数多次
    • 实参的位置顺序很重要
  • 关键字实参
    • 关键字实参是传递给函数的名称—值对
    • 在实参中将名称和值关联起来
    • 无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途
    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(animal_type='hamster', pet_name='harry')
    
  • 默认值
    • 函数定义时,给每个形参指定默认值
    • 函数调用提供了实参时,函数使用实参值,否则使用默认值
    def describe_pet(pet_name, animal_type='dog'):
    	"""显示宠物的信息"""
    	print("\nI have a " + animal_type + ".")
    	print("My " + animal_type + "'s name is " + pet_name.title() + ".")
    
    • 形参指定默认值后,将放置在最后;依旧遵守位置实参的对应方式
  • 等效的函数调用
    • 可混合使用位置实参、关键字实参和默认值
    • 避免传参错误

返回值

	函数直接显示输出;
	函数处理一些数据,并返回一个或一组值。
  • 返回简单值
    • 调用返回值的函数时,需要提供一个变量,用于存储返回的值
    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)
  • 在函数中修改列表
    • 函数中对列表的修改都是永久性的
  • 禁止函数修改列表
    • 向函数传递列表的副本,而不是原件
      function_name(list_name[:])
      

传递任意数量的实参

  • 使用 * 号创建一个空元组,并将函数收到的值都封装到这个元组中

    def make_pizza(*toppings):
    	"""打印顾客点的所有配料"""
    	print(toppings)
    make_pizza('pepperoni')
    make_pizza('mushrooms', 'green peppers', 'extra cheese')
    
  • 结合使用位置实参和任意数量实参

    • 要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后
    • 先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中
  • 使用任意数量的关键字实参

    • 能够接受任意数量的键—值对
    • 两个 ** 号创建一个空字典
    def build_profile(first, last, **user_info):
    	"""创建一个字典,其中包含我们知道的有关用户的一切"""
    	profile = {}
    	profile['first_name'] = first
    	profile['last_name'] = last
    	for key, value in user_info.items():
    	profile[key] = value
    	return profile
    
  • 可以以各种方式混合使用位置实参、关键字实参和任意数量的实参

将函数存储在模块中

import语句允许在当前运行的程序文件中使用模块中的代码
  • 导入整个模块

    import pizza
    pizza.make_pizza(16, 'pepperoni')
    
  • 导入特定的函数

    from module_name import function_name
    from module_name import function_0, function_1, function_2
    
  • 使用as 给函数指定别名

    from pizza import make_pizza as mp
    mp(16, 'pepperoni')
    
  • 使用as 给模块指定别名

    import pizza as p
    p.make_pizza(16, 'pepperoni')
    
  • 导入模块中的所有函数

    • 使用星号(*)运算符可让Python导入模块中的所有函数
      from pizza import *
      
    • 最好不要使用这种方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值