美文网首页
python函数

python函数

作者: 学习编程王同学 | 来源:发表于2018-03-22 23:42 被阅读12次

    调用函数

    Python自己就拥有很多函数,比如常用的input()print()

    name = input ("What's your name? ")
    print ("Hello," , name)
    

    这个程序读取用户输入的内容并以特定的格式显示出来。

    定义函数

    下面是一个显示问候语的函数,名为greet_user()

    def greet_user():           # 定义greet_user函数
        """显示简单友好的问候"""
        print ("Hello!")
        
    greet_user()                # 调用greet_user函数
    

    这个例子展示了最简单的函数结构。

    def greet_user():,使用关键字def表示要定义一个函数,greet_user是函数的名字,()内写函数执行需要的参数,最后以冒号:结尾。

    由于这个函数不需要其他参数,所以()是空的。

    函数体内部的"""显示简单友好的问候"""是被称为文档字符串的注释,描述函数是做什么的;注释内容由三引号"""括起来,Python用它们来生成文档。

    函数体内部的代码行就是函数要做的工作,在本例中,函数只打印"Hello!"字符串。

    调用函数时,只需要指定函数名和参数即可,greet_user()不需要任何参数,所以写空括号:

    greet_user()
    

    只需要稍作修改,就可以将greet_user()改造成对任何给定用户显示欢迎信息:

    def greet_user_name (name):         # 定义函数
        """对特定用户显示简单友好的问候"""
        print ("Hello," , name , "!")
        
    greet_user_name('mwang')            # 调用函数
    greet_user_name('liqiang')          # 又一次调用函数
    

    可以看到,我们在定义函数行函数名后面的括号里添加了name变量,并且在函数体内部打印欢迎信息时使用了该变量。

    在调用需要指定参数的函数时,只需要在调用语句函数名后面的括号中给定参数即可,比如:

    greet_user_name('mwang')
    

    这个语句将字符串mwang作为参数传递给greet_user_name函数,函数会接受参数并且使用它。

    整个程序的执行示例如下:

    Hello, mwang !
    Hello, liqiang !
    

    形式参数与实际参数

    让我们重温这段程序:

    def greet_user_name (name):         # 定义函数
        """对特定用户显示简单友好的问候"""
        print ("Hello," , name , "!")
        
    greet_user_name('mwang')            # 调用函数
    greet_user_name('liqiang')          # 调用函数
    

    在函数定义中,参数变量name称为形式参数(形参),它是函数完成工作所需的信息。

    在函数调用中传递给函数的信息叫做实际参数(实参),比如本例中的'mwang''liqiang'

    将实参传递给函数后,它被保存在形参name里。

    四种参数

    位置参数

    最常用的是位置参数,比如下面的函数:

    def describe_pet_1 (name, animal_type):
        """显示用户名和其宠物(位置参数)"""
        print ("Hi! I'm " + name + ". My pet is a(n) " + animal_type + ".")
    

    函数名是describe_pet_1,具有两个参数,分别是nameanimal_type

    这个例子中,参数的顺序都是确定的,因此叫做位置参数。

    调用该函数:

    describe_pet_1 ('Li Hua', 'dog')
    

    执行结果:

    Hi! I'm Li Hua. My pet is a(n) dog.
    

    可以看到,程序得到了正确的执行。

    对于使用位置参数的函数,如果调用该函数时参数数目不对,Python会给出错误。

    如果搞错了参数的顺序,即便程序得到正确执行,也可能会发生笑话,比如使用下面的语句调用该函数:

    describe_pet_1 ('a dog', 'Li Hua')
    

    执行结果如下:

    Hi! I'm a dog. My pet is a(n) Li Hua.
    

    结果李华成了狗的宠物,令人啼笑皆非。

    关键字参数

    为了避免上面的尴尬,在只记得形参名而不记得其顺序的时候,可以使用关键字参数。比如这样调用describe_pet_1函数:

    describe_pet_1 (animal_type = 'dog', name = 'Li Hua')
    

    上面的例子中,使用形参 = 实参的格式为每个形参赋值,由于一一对应,所以即便顺序不对,Python也能很好的对应形参与实参。程序执行如下:

    Hi! I'm Li Hua. My pet is a(n) dog.
    

    默认参数

    可以在函数定义中为形参赋予一个默认值,如下例:

    def describe_pet_2 (name, animal_type = ", oh, I don't have a pet"):
        """显示用户名和其宠物(默认参数)"""
        print ("Hi! I'm " + name + ". My pet is a(n) " + animal_type + ".")
    

    程序中使用形参名 = 值的格式为参数赋默认值。

    调用该函数时,仍然需要指定name的值,但是是否指定animal_type的值是可选的:在不指定时,使用默认值(", oh, I don't have a pet");在指定时,使用指定值。

    对于下面的调用:

    describe_pet_2 ('Zhang 3')
    

    结果如下:

    Hi! I'm Zhang 3. My pet is a(n) , oh, I don't have a pet.
    

    调用时并没有给出第二个参数(animal_type)的值,因此使用其默认值。

    对于下面的调用:

    describe_pet_2 ('Li 4', 'cat')
    

    第二个参数被指定,则使用其指定值,运行结果如下:

    Hi! I'm Li 4. My pet is a(n) cat.
    

    需要注意的是,默认参数一般放在最后,因为是否对其赋值是可选的。在上面的例子中,如果在调用中只指定了animal_type一个实参,则Python仍然会将其当成第一个参数name处理。

    不定长参数

    如果需要传入的参数个数没有确定,则可以使用不定长参数。

    下面是一个不定长参数的例子:

    def describe_pet_3 (name, *animal_type):
        """显示用户名和其宠物(不定长参数)"""
        print ("Name: " + name)
        print ("Pets:")
        for pet in animal_type:
            print ("- " + pet)
    

    在参数animal_type前加*将其作为不定长参数,它可以接受0或多个实参。

    调用该函数时,第一个实参被指定为第一个形参name的值,其余的实参被指定为第二个形参animal_type的值。

    调用该函数:

    describe_pet_3 ('Wang 5', 'Bear', 'Deer', 'Duck', 'Goose')
    

    执行结果如下:

    Name: Wang 5
    Pets:
    - Bear
    - Deer
    - Duck
    - Goose
    

    可以看到,第一个实参Wang 5被指定为第一个形参name的值,其余的实参被指定为第二个形参animal_type的值(实际上是将其作为一个元组赋值给形参)。

    不可变类型与可变类型的参数传递

    在Python中,数字、字符串和元组是不可变的类型,列表和字典是可变的类型。

    在Python中传递参数时:

    • 对于不可变类型,传递的是一个值的拷贝。
    • 对于可变类型,传递的即是原值。

    返回值

    Python中返回值非常简单,使用return语句即可:

    def get_full_name (first_name, last_name):
        full_name = first_name + last_name
        return full_name
    

    该函数接受名和姓,将其连接为一个整体,并返回。

    计算多个数字之和

    现在写一个程序,它可以读取用户输入的多个数字,并将其结果返回。它的大致流程如下:

    1. 程序开始。
    2. 显示欢迎信息。
    3. 读取用户输入。
    4. 对用户输入进行处理,并将其转化成数字。
    5. 求和。
    6. 显示结果。
    7. 显示结束信息。
    8. 程序结束。

    程序主体结构如下:

    say_hello()  # 显示欢迎信息
    numbers_str_list = get_numbers_str_list()  # 得到用户输入
    numbers_list = get_numbers_list (numbers_str_list)  # 将用户输入转化成数字
    sum_of_numbers = sum_up (numbers_list)  # 计算数字之和
    say_result (sum_of_numbers)  # 显示结果
    say_bye()  # 显示结束信息
    

    say_hello()say_bye()非常简单,不再多做解释:

    def say_hello ():
        """显示欢迎信息"""
        print ("你好!我能计算几个数字之和!")
        username = input ("你的名字是? ")
        print ("欢迎, " + username + ". 现在开始吧!")
        
    def say_bye ():
        """显示结束信息"""
        print ('感谢您的参与,再见!')
    

    get_numbers_str_list()不接收参数,它读取用户的输入的字符串,按空格分割字符串,将其保存在一个列表里,并返回该列表:

    def get_numbers_str_list ():
        """得到用户输入的字符串列表"""
        numbers_str =  input ("请输入您的数字,用空格分割: ")
        numbers_str = numbers_str.strip()
        numbers_str_list = numbers_str.split()
        return numbers_str_list # 返回了字符串列表
    

    在的到用户输入的字符串列表后,需要把它转换成数字列表,这就是get_numbers_list()的作用,它接受一个列表作为参数,将列表中的值转换成数字,并返回该数字列表。如果转换失败,则会显示错误信息。该函数如下:

    def get_numbers_list (numbers_str_list):
        """将字符串列表转化成数字列表"""
        numbers_list = list()
        for number in numbers_str_list:
            try:
                number = float (number)
            except:
                print ('您输入的不是数字, ' + number)
                exit ()
            numbers_list.append(number)
        return numbers_list     # 返回了数字列表
    

    至此,如果一切顺利,我们获得了用户的输入的数字列表,仅需要对列表中的值求和就行:

    def sum_up (numbers):
        """求和"""
        count = 0
        count = sum (numbers)
        return count    # 返回了数字
    

    显示计算结果:

    def say_result (sum_num):
        """输出计算结果"""
        print ('它们的和是: ' + str(sum_num))
    

    执行该程序的示例如下:

    $ python sum_numbers.py
    你好!我能计算几个数字之和!
    你的名字是? mwang
    欢迎, mwang. 现在开始吧!
    请输入您的数字,用空格分割: 1.1 2.2 3.3 4.4 5.5
    它们的和是: 16.5
    感谢您的参与,再见!
    

    相关文章

      网友评论

          本文标题:python函数

          本文链接:https://www.haomeiwen.com/subject/aottcftx.html