Python教程(8)

8 函数

8.1 定义函数

  • Python用def关键字来定义一个函数,并向它指定函数名;

    def greet_user(name: str):  # 定义一个函数,并且向其中传递一个字符串参数
        """显示简单的问候语句"""  # 文档字符串的注释,用于描述函数是做了什么。用三个引号括起,Python可以用他们来生成有关程序中函数的文档
        print("Hello word " + name)
        return  # 返回一个值,这里不返回什么
    
    
    greet_user("Bob")  # 调用这个函数
    

8.1.1 向函数传递参数

  • 可以在定义的函数内添加参数,将信息传递给函数

    def greet_user(name):  # 定义一个函数
        """显示简单的问候语句"""  # 文档字符串的注释,用于描述函数是做了什么。用三个引号括起,Python可以用他们来生成有关程序中函数的文档
        print("Hello word " + str(name))	# 使用str()函数,将数值型变量转变为字符型变量
        return  # 返回一个值,这里不返回什么
    
    
    greet_user('Bob')  # 调用这个函数
    greet_user(112)
    

8.2 实参和形参

向函数传递实参的方式有很多种,主要有以下两种:

  • 位置实参:要求实参的顺序与形参的顺序相同
  • 关键字实参:要求每个实参都由变量名和值组成

8.2.1 位置实参

def greet_user(name: str, age: int, country: str):  # 定义一个函数
    """显示简单的问候语句"""  # 文档字符串的注释,用于描述函数是做了什么。用三个引号括起,Python可以用他们来生成有关程序中函数的文档
    print("Hello " + str(name) + " 你今年" + str(age) + "岁,来自" + str(country))
    return  # 返回一个值,这里不返回什么


greet_user('Bob', 17, '美国')  # 调用这个函数,使用位置实参来传递参数
greet_user(17, 'Bob', '美国')  # 当位置实参的顺序错误时

8.2.2 关键字实参

def greet_user(name: str, age: int, country: str):  # 定义一个函数
    """显示简单的问候语句"""  # 文档字符串的注释,用于描述函数是做了什么。用三个引号括起,Python可以用他们来生成有关程序中函数的文档
    print("Hello " + str(name) + " 你今年" + str(age) + "岁,来自" + str(country))
    return  # 返回一个值,这里不返回什么

greet_user(country='美国', age=17, name='Tom')  # 使用关键字实参,可以不用考虑传参的位置

8.2.3 默认值

  • 编写函数时,可给每个形参指定默认值。在调用函数中形参提供了实参时,将使用指定的实参,否则将使用形参的默认值

    def greet_user(name: str, age: int, country: str = '中国'):  # 定义一个函数,最后一个形参定义了一个默认值
    # def greet_user(name, age, country='中国'):
        """显示简单的问候语句"""  # 文档字符串的注释,用于描述函数是做了什么。用三个引号括起,Python可以用他们来生成有关程序中函数的文档
        print("Hello " + str(name) + " 你今年" + str(age) + "岁,来自" + str(country))
        return  # 返回一个值,这里不返回什么
    
    
    greet_user('Tom', 17)
    

8.3 返回值

函数并非总是直接显示输出,也可以处理一些数据,并返回一个或者一组值。函数返回的值称为返回值

8.3.1 返回简单值

def get_name(fist_name, last_name):  # 定义一个函数,返回一个整洁的姓名
    full_name = fist_name + ' ' + last_name
    return full_name.title()  # 返回每个单词首字母大写的名字


print(get_name('li', 'ping'))

8.3.2 让实参变成可选的

  • 有时候需要让实参变成可选的,在使用函数的时候只需要在必要的时候才提供额外信息,可以使用默认值来让实参变成可选的。

  • 给可选的实参设置一个默认值——一个空字符串,并在没有提供参数传递时不使用,并且必须将这个参数放在形参列表的末尾。

    def get_name(fist_name, last_name, middle_name=''):  # 定义一个函数,返回一个整洁的姓名
        """返回一个整洁的名字,无论有没有中间姓名,如果要传递中间名,中间名放在最后一个位置"""
        if middle_name:  # 如果中间名存在
            full_name = fist_name + ' ' + middle_name + ' ' + last_name
        else:  # 如果不存在
            full_name = fist_name + ' ' + last_name
        return full_name.title()  # 返回每个单词首字母大写的名字
    
    
    print(get_name('john', 'hooker', 'lee'))  # 有中间名
    print('li', 'ping')  # 没有中间名
    

8.3.3 返回字典

def build_name(first_name: str, last_name: str, age: str = ''):
    """返回一个字典,其中包含一个人的信息"""
    person = {'first_name': first_name.title(), 'last_name': last_name.title()}
    if age:
        person['age'] = age	# 添加年龄信息
    return person


li_ping = build_name('li', 'ping', '12')  # 建立一个字典,包含一个名为liping的人的一些信息
print(li_ping)  # 打印这个字典

8.4 传递列表

  • 将列表传递给函数后,函数就可以直接访问其内容。

8.4.1 在函数中修改列表

numbers = list(range(1, 6))  # 生成一个1~6的数字列表
print(numbers)


def change_number(my_list: list):
    """将列表的第一个元素删除"""
    my_list.pop(0)
    return my_list


print(change_number(numbers))

8.4.2 禁止函数修改列表

  • 有时要用到列表,但又不希望修改原列表,可以使用列表切片法

    numbers = list(range(1, 6))  # 生成一个1~6的数字列表
    print(numbers)
    
    
    def change_number(my_list: list):
        """将列表的第一个元素删除"""
        my_list.pop(0)
        return my_list
    
    
    print("函数处理后的列表" + str(change_number(numbers[:])))  # 切片表示法[:]创建列表的副本
    print("原列表仍为:" + str(numbers))
    

8.5 传递任意数量的实参

  • 如果预先不知道函数需要接受多少个实参,可以使用星号-""来创建一个空的元组,如top并将所收到的值都封装到这个元组中。

    def build_info(*tops):  # 用星号建立一个空的元组
        """打印所有传递的值"""
        print("传递的值为:" + str(tops))  # 输出这个元组
        return
    
    
    build_info("湖南", "长沙", "株洲")
    

    8.5.1 结合使用位置实参和任意数量实参

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

      def build_info(country: str, *tops):  # 用星号建立一个空的元组,将位置实参放在任意数量实参的前面
          """打印所有传递的值"""
          print(str(country) + " 传递的额外参数为:" + str(tops))  # 输出这个元组
          return
      
      
      build_info("中国", "湖南", "长沙", "株洲")  # 参数“中国”传递的是一个位置实参,后面的参数是任意实参
      

    8.5.2 使用任意数量的关键字实参

    • 如果需要接受任意数量的参数,但预先不知道传递给函数的会是什么样的信息,在这种情况下,可将函数编写成能够接受任意数量的键-值对

      def build_profile(first_name: str, last_name: str, **user_info):
          # 形参列表的最后一个形参,建立了一个名为user_info的空字典,用来存储额外的健-值对
          """创建一个字典,其中包含用户的一切信息"""
          profile = {}
          profile['first_name'] = first_name  # 将相关健-值存储在字典中
          profile['last_name'] = last_name
          for key, value in user_info.items():  # 遍历字典user_info,并且将键和值取出,存储到profile中
              profile[key] = value
          return profile
      
      
      user_liping = build_profile('Li', 'Ping', age=12, sex='女')
      print(user_liping)8.6 将函数存储在模块中
      
    • 可以将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。

    8.6 模块导入

    8.6.1 导入整个模块

    先建立一个.py的文件

    Function.py

    def function_1():
        print("This is function 1")
        return
    
    
    def function_2():
        print("This is function 2")
        return
    
    
    def function_3():
        print("This is function 3")
        return
    

    在main.py中,通过import来导入

    import Function as Fct  # 导入模块,并用as给这个模块重命名为Fct
    
    Fct.function_1()
    Fct.function_2()
    

    8.6.2 导入特定的函数

    使用from-import 来导入特定的某个函数,也可以用as来重命名这个函数

    from Function import function_1  # 导入Function模块中的function_1函数
    
    function_1()
    

    8.6.3 导入模块中的所有函数

    from Function import *  
    # 用星号来省略函数名,不推荐这种写法,如果模块中有函数名称和项目中使用的名称相同,可能导致不同的结果
    
    function_1()
    function_2()
    function_3()
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值