美文网首页
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 - 2017/01/28-函数

    调用python内置函数 函数名(参数) 即可调用python内置函数 help(函数名) 返回python对于函...

  • Python函数式介绍一 - 高阶函数

    Python函数式介绍一 - 高阶函数Python函数式介绍二 - 链式调用 最近为了给朋友推广Python函数式...

  • Python高阶函数学习笔记

    python中的高阶函数是指能够接收函数作为参数的函数 python中map()函数map()是 Python 内...

  • Python学习笔记1

    Python注释 Python变量 Python运算符 Python输入输出 输入函数 输出函数(3.x) ...

  • Python:内置函数

    python的内置函数,匿名函数 内置函数 内置函数就是python给你提供的,拿来直接用的函数,比如print,...

  • 二级Python----Python的内置函数及标准库(DAY

    Python的内置函数 嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 python的内置函数(68个) Py...

  • python3 range() 函数和 xrange() 函数

    python3 range 函数 python3 取消了 xrange() 函数,并且和 range() 函数合并...

  • 7、函数

    1、Python之什么是函数 2、Python之调用函数 Python内置了很多有用的函数,我们可以直接调用。 要...

  • Python入门

    Python3教程 安装Python 第一个Python程序 Python基础 函数 高级特性 函数式编程 模块 ...

  • Python函数详解

    函数是Python里组织代码的最小单元,Python函数包含以下几个部分: 定义函数 调用函数 参数 函数的返回值...

网友评论

      本文标题:python函数

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