前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python函数

python函数

作者头像
mwangblog
发布2018-07-04 11:36:12
8730
发布2018-07-04 11:36:12
举报
文章被收录于专栏:mwangblogmwangblog

python函数

本文目录

  • 1 调用函数
  • 2 定义函数
  • 3 形式参数与实际参数
  • 4 四种参数
    • 4.1 位置参数
    • 4.2 关键字参数
    • 4.3 默认参数
    • 4.4 不定长参数
  • 5 不可变类型与可变类型的参数传递
  • 6 返回值
  • 7 计算多个数字之和

调用函数

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

代码语言:javascript
复制
name = input ("What's your name? ")print ("Hello," , name)

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

定义函数

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

代码语言:javascript
复制
def greet_user():           # 定义greet_user函数
    """显示简单友好的问候"""
    print ("Hello!")greet_user()                # 调用greet_user函数

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

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

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

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

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

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

代码语言:javascript
复制
greet_user()

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

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

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

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

代码语言:javascript
复制
greet_user_name('mwang')

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

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

代码语言:javascript
复制
Hello, mwang !
Hello, liqiang !

形式参数与实际参数

让我们重温这段程序:

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

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

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

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

四种参数

位置参数

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

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

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

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

调用该函数:

代码语言:javascript
复制
describe_pet_1 ('Li Hua', 'dog')

执行结果:

代码语言:javascript
复制
Hi! I'm Li Hua. My pet is a(n) dog.

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

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

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

代码语言:javascript
复制
describe_pet_1 ('a dog', 'Li Hua')

执行结果如下:

代码语言:javascript
复制
Hi! I'm a dog. My pet is a(n) Li Hua.

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

关键字参数

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

代码语言:javascript
复制
describe_pet_1 (animal_type = 'dog', name = 'Li Hua')

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

代码语言:javascript
复制
Hi! I'm Li Hua. My pet is a(n) dog.

默认参数

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

代码语言:javascript
复制
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");在指定时,使用指定值。

对于下面的调用:

代码语言:javascript
复制
describe_pet_2 ('Zhang 3')

结果如下:

代码语言:javascript
复制
Hi! I'm Zhang 3. My pet is a(n) , oh, I don't have a pet.

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

对于下面的调用:

代码语言:javascript
复制
describe_pet_2 ('Li 4', 'cat')

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

代码语言:javascript
复制
Hi! I'm Li 4. My pet is a(n) cat.

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

不定长参数

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

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

代码语言:javascript
复制
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的值。

调用该函数:

代码语言:javascript
复制
describe_pet_3 ('Wang 5', 'Bear', 'Deer', 'Duck', 'Goose')

执行结果如下:

代码语言:javascript
复制
Name: Wang 5
Pets:
- Bear
- Deer
- Duck
- Goose

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

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

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

在Python中传递参数时:

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

返回值

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

代码语言:javascript
复制
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. 程序结束。

程序主体结构如下:

代码语言:javascript
复制
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()非常简单,不再多做解释:

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

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

代码语言:javascript
复制
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()的作用,它接受一个列表作为参数,将列表中的值转换成数字,并返回该数字列表。如果转换失败,则会显示错误信息。该函数如下:

代码语言:javascript
复制
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     # 返回了数字列表

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

代码语言:javascript
复制
def sum_up (numbers):
    """求和"""
    count = 0
    count = sum (numbers)
    return count    # 返回了数字

显示计算结果:

代码语言:javascript
复制
def say_result (sum_num):
    """输出计算结果"""
    print ('它们的和是: ' + str(sum_num))

执行该程序的示例如下:

代码语言:javascript
复制
$ python sum_numbers.py
你好!我能计算几个数字之和!
你的名字是? mwang
欢迎, mwang. 现在开始吧!
请输入您的数字,用空格分割: 1.1 2.2 3.3 4.4 5.5
它们的和是: 16.5
感谢您的参与,再见!
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python函数
    • 调用函数
      • 定义函数
        • 形式参数与实际参数
          • 四种参数
            • 位置参数
            • 关键字参数
            • 默认参数
            • 不定长参数
          • 不可变类型与可变类型的参数传递
            • 返回值
              • 计算多个数字之和
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档