Python编程从入门到实践之函数|第8天

User:你好我是森林 Date:2018-03-21 Mark:《Python从入门到实践》 原文:https://www.jianshu.com/p/ff1591b7c8b5

函数

函数是带名字的代码块,用于完 成具体的工作。要执行函数定义的特定任务,可调用该函数。需要在程序中多次 执行同一项任务时,你无需反复编写完成该任务的代码,而只需调用 执行该任务的函数,让Python运行其中的代码。

定义函数

定义函数的关键字:def,由此来告诉Python这是一个函数。

代码示例:

def hello_user():
    "函数体说明部分"
    mes = "你好我是森林"
    print(mes)
    
hello_user()

def关键字定义函数;hello_user()是该函数的函数名;冒号定义结尾;冒号后面到缩进结尾表示该函数的函数体,也就是函数需要做什么。上述函数就是打印一个变量。执行结果为:你好我是森林。而最后一行表示调用函数名为hello_user()的函数。

向函数传递信息

在函数名后面的括号可以进行传参操作,例如传入简单的用户名。

代码示例:

def get_user(username):
    """用户信息"""
    print("我的名字叫: " + username)
    
get_user("你好我是森林")

执行结果:

我的名字叫:你好我是森林
实参和形参

方法在定义的时候的参数称为形参,函数完成其工作所需的一项信 息;函数在调用的时候传入的参数称为实参。

例如在上面的代码中,get_user(username)的username未形参,而调用的时候输入你好我是森林`为实际参数。

传递实参

鉴于函数定义中可能包含多个形参,因此函数调用中也可能包含多个实参。向函数传递实参的方式很多,可使用位置实参,这要求实参的顺序与形参的顺序相同;也可使用关键字实参,其中每个实参都由变量名和值组成;还可使用列表和字典。

位置实参

调用函数时,Python必须将函数调用中的每个实参都关联到函数定义中的一个形参。为此,最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。

def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')

根据type的类型传入的值,输入不一样的结果。传入的年龄就存入函数的type变量中,88就存入value变量中。这样就能够完整的输出。结果为:我的年龄是: 88

根据这个结果可以推出,该函数可以被多次调用。例如:

def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')
get_user("体重",'100')
get_user("身高",'180')
get_user("性别",'男')

输出的结果是:

我的年龄是: 18
我的体重是: 100
我的身高是: 180
我的性别是: 男

需要注意的是传参的位置很重要。如果传参顺序出错,就容易出现笑话。

例如:

def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')
get_user("100",'体重')
get_user("100",'身高')
get_user("男",'性别')

运行的结果:

我的年龄是: 18
我的100是: 体重
我的100是: 身高
我的男是: 性别
关键字实参

关键字实参是传递给函数的名称—值对。直接在实参中将名称和值关联起来了,因此向函数传递实参时不会混淆。关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。

代码示例:

def get_user(type,value):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')
get_user(value="18",type = 'age')

运行结果

我的年龄是: 18
我的age是: 18
默认值

编写函数时,可给每个形参指定默认值。在调用函数中给形参提供了实参时,Python将使用 指定的实参值;否则,将使用形参的默认值。因此,给形参指定默认值后,可在函数调用中省略相应的实参。使用默认值可简化函数调用,还可清楚地指出函数的典型用法。

代码示例:

def get_user(type,value = '19'):
    """用户信息"""
    print("我的" + type + "是: " + value)
    
get_user("年龄",'18')
get_user("年龄") #没有传值

运行结果:

我的年龄是: 18
我的年龄是: 19

使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。 这让Python依然能够正确地解读位置实参。

等效的函数调用

鉴于可混合使用位置实参、关键字实参和默认值,通常有多种等效的函数调用方式。基于这种定义,在任何情况下都必须给函数提供实参;指定该实参时可以使用位置方式,也可以使用关键字方式。同样,指定该实参时可以使用位置方式,也可以使用关键字方式。

返回值

函数并非总是直接显示输出,相反,它可以处理一些数据,并返回一个或一组值。函数返回 的值被称为返回值。在函数中,可使用return语句将值返回到调用函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。

返回简单值

代码示例:

def get_user_info(type,info):
    """返回用户信息"""
    user_info =  "我的" + type + "是: " + info
    return user_info.title()

user_info = get_user_info('身高','190')
print(user_info)

运行结果:

我的身高是: 190

返回一条字符串类型的用户的信息,然后赋值给变量user_info,最后打印输出。

让实参变成可选的

在某些时候我们的参数可能不是必选,但是需要设置默认值就可以决定是否需要传参。

返回字典

将用户的信息存储在字典中。

def build_person(first_name, last_name): 
    """返回一个字典,其中包含有关一个人的信息"""
    person = {'first': first_name, 'last': last_name}
    return person

musician = build_person('jimi', 'hendrix')
print(musician)

同时该字典还可以不断的增加。例如新增返回年龄。

调用函数:

def build_person(first_name, last_name,age=''): 
    """返回一个字典,其中包含有关一个人的信息"""
    person = {'first': first_name, 'last': last_name}
    if age:
        person['age'] = age
    return person
 
musician = build_person('jimi', 'hendrix',age=19)
print(musician)

返回结果:

{'first': 'jimi', 'last': 'hendrix', 'age': 19}

原文链接:你好我是森林

欢迎转载分享,但请标记来源,谢谢。

知识星球

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏武军超python专栏

2018年7月26日python中面向对象中的封装

9720
来自专栏Android开发指南

6:异常处理

30880
来自专栏企鹅号快讯

轻松学习Python:基础知识汇总

Python基础01 Hello World! Python命令行 假设你已经安装好了Python, 那么在命令提示符输入: python 将直接进入pytho...

19180
来自专栏IMWeb前端团队

JavaScript强化教程——使用误区

本文为 H5EDU 机构官方 HTML5教程,主要介绍:JavaScript强化教程 —— 使用误区 JavaScript使用误区 本章节我们将讨论 JavaS...

21060
来自专栏ImportSource

厕读:每日一题,面试无忧

4. 下列说法正确的有() A. class中的constructor不可省略 B. constructor必须与class同名,但方法不能与class同名 C...

29360
来自专栏Python中文社区

Python文档研读系列:zip函数

zip([iterable, ...]) This function returns a list of tuples, where the i-th tupl...

221100
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-day10-基础题-继承;抽象类

Java基础-day10-基础题-继承&抽象类 什么是继承?继承有什么好处? 继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类...

38660
来自专栏玄魂工作室

如何学python 第10课 创建自己的函数

在上一节课里,我们学习了一些关于错误检测和错误处理的知识。这节课我们来学习函数。我们将会介绍什么是函数,以及如何创建函数。 函数是什么? 函数是一系列指令的集合...

273120
来自专栏技术点滴

不要被C++“自动生成”所蒙骗

不要被C++“自动生成”所蒙骗 C++对象可以使用两种方式进行创建:构造函数和复制构造函数。假如我们定义了类A,并使用它创建对象。 A a,b; A c=a; ...

23990
来自专栏企鹅号快讯

Python类与面向对象

面向对象程序 程序 = 指令 + 数据 代码可以选择以指令为核心或以数据为核心进行编程 两种范例 1.以指令为核心:围绕"正在发生什么"编写 面向过程编程:程序...

27880

扫码关注云+社区

领取腾讯云代金券