一、函数的作用

函数可以让我们代码结构更清晰,而且避免了代码的重复,冗余,使一段代码或者功能可以反复的被调用,大大提高了开发效率

二、函数的定义

def 函数名(参数1,参数2,*args,默认参数,**kwargs):
"""注释:函数功能和参数说明"""
函数体
……
return 返回值
1.定义:def 关键词开头,空格之后接函数名称和圆括号()。
2.参数:圆括号用来接收参数。若传入多个参数,参数之间用逗号分割。
    参数可以定义多个,也可以不定义。
    参数有很多种,如果涉及到多种参数的定义,应始终遵循位置参数、*args、默认参数、**kwargs顺序定义。
    如上述定义过程中某参数类型缺省,其他参数依旧遵循上述排序
3.注释:函数的第一行语句应该添加注释。
4.函数体:函数内容以冒号起始,并且缩进。
5.返回值:return [表达式] 结束函数。不带表达式的return相当于返回 None

实例如下:

 def my_max(x,y):
'''比较两个值的大小,返回最大的那个数'''
if x > y:
return x
if x < y:
return y
else:
return '%s=%s'%(x,y)

三、函数的调用

调用函数很简单,就是已经定义的函数名加括号,如果此函数需要参数,那括号内就要加入需要传的参数。如,调用上面定义的my_max函数的方法如下:

 my_max(5,2)

四、函数的返回值

我们只需要在函数的最后加上一个return,return后面写上你要返回的值就可以了。

接下来,我们就来研究一下这个return的用法。

return关键字的作用

  return 是一个关键字,在pycharm里,你会看到它变成蓝色了。你必须一字不差的把这个单词给背下来。

  这个词翻译过来就是“返回”,所以我们管写在return后面的值叫“返回值”

  要研究返回值,我们还要知道返回值有几种情况:分别是没有返回值、返回一个值、返回多个值

没有返回值

  不写return的情况下,会默认返回一个None,等同于 return None

有一个返回值

  return 后面跟上返回值即可,调用函数的话可以用一个变量来接收这个返回值(就是将函数执行完之后的返回值赋给这个变量),如下:

 def my_sum(x,y):
'''求两个数字的和,返回两数之和'''
return x+y sum = my_sum(3,2) #调用函数
print(sum) #结果:5

有多个返回值

  如果有多个返回值的话只需在return后面依次跟上返回值,用逗号隔开。

  调用函数 的时候可以用一个变量来接收(此时返回的是一个元祖,赋值给此变量),也可以用多个变量来接收,此时返回值会按变量的顺序,一 一赋值(变量数要跟返回值的数目相等),如下:

 def getNum():
'''返回三个数字的函数'''
return 1,3,6 res = getNum()  #用一个变量接收返回值
print(res) #结果是:(1, 3, 6) a,b,c = getNum() #用一个变量接收返回值
 print(a,b,c)      #结果是:1 3 6

五、函数的参数

函数的参数分为形参和实参。简单来讲,形参就是定义函数的时候的参数,而实参就是调用函数的时候传递的参数

而在调用函数进行传值的时候,传参方式又分为位置传参和关键字传参。

位置传参是按照位置进行传值(此时,解释器会按照顺序,将实参一 一对应赋值给形参),

关键字传参是按照关键字进行传值(这种传参方式是直接将实参以赋值的方式传给形参,如x=1,y=2)

位置传参的优点是方便,只需一一写出需要传递的实参就行,关键之传参的优点是可以改变参数顺序。

如下:

     '''求两个数字的和,返回两数之和'''
return x+y my_sum(3,2) #位置传参
my_sum(x=3,y=2) #关键字传参

此外,还有一种参数是默认参数,是指在定义函数的时候,其中一个或者多个参数已经指定了默认值

这种情况下在调用函数进行传参的时候,依然可以传递实参给此形参,如果不传,此参数的值即为默认值,如下:

 def user_info(name,sex='男'):
'''用户信息'''
print('%s的性别是%s'%(name,sex)) user_info('小明') #结果为:小明的性别是男生 。不用指定的情况下,默认是男
user_info('小花','女')#结果是:小花的性别是女。 传参的情况下,会覆盖默认值

另外,还有一种特殊的参数,他可以接收任何数量的参数,称为动态参数

  而动态参数又有两种,一种是参数名前加一个星号 " * " 这种参数可以接收不限数量的位置参数,然后组成一个元祖

  另一种是动态参数是参数名前加两个星号 “ ** ”  这种参数可以接收不限数量的关键字参数,然后组成一个字典

  如下:

 def func(*args,**kwargs):
print(args)
print(kwargs) func(1,2,3,a='a',b='b',c='c')
#结果为:
# (1, 2, 3)
# {'b': 'b', 'c': 'c', 'a': 'a'}

需要注意的是:如果一个函数的参数包括:位置参数,默认参数,以及动态参数 *args 和 **kwargs,那么他们的顺序应该是:(位置参数,*args,默认参数,**kwargs)

Python笔记·第九章—— 函数 (一)的更多相关文章

  1. Python 数据分析—第九章 数据聚合与分组运算

    打算从后往前来做笔记 第九章 数据聚合与分组运算 分组 #生成数据,五行四列 df = pd.DataFrame({'key1':['a','a','b','b','a'], 'key2':['one ...

  2. Android群英传笔记——第九章:Android系统信息和安全机制

    Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个 ...

  3. python 教程 第九章、 类与面向对象

    第九章. 类与面向对象 1)    类 基本类/超类/父类被导出类或子类继承. Inheritance继承 Inheritance is based on attribute lookup in Py ...

  4. Python第六章-函数01-函数的概念和使用

    函数 为了便于程序的维护和更好的实现模块化,好的程序都会分解为很多函数. 可以这么说,对于任何的编程语言,函数都是一个非常重要的概念. python 不仅简化了函数的定义过程,而且还大量借鉴了其他函数 ...

  5. o'Reill的SVG精髓(第二版)学习笔记——第九章

    第九章:文本 9.1 字符:在XML文档中,字符是指带有一个数字值的一个或多个字节,数字只与Unicode标准对应. 符号:符号(glyph)是指字符的视觉呈现.每个字符都可以用很多不同的符号来呈现. ...

  6. 《Interest Rate Risk Modeling》阅读笔记——第九章:关键利率久期和 VaR 分析

    目录 第九章:关键利率久期和 VaR 分析 思维导图 一些想法 有关现金流映射技术的推导 第九章:关键利率久期和 VaR 分析 思维导图 一些想法 在解关键方程的时候施加 \(L^1\) 约束也许可以 ...

  7. Python第六章-函数02-函数的作用域

    函数 三.作用域规则 有了函数之后,我们必须要面对一个作用域的问题. 比如:你现在访问一个变量,那么 python 解析器是怎么查找到这个变量,并读取到这个变量的值的呢? 依靠的就是作用域规则! 3. ...

  8. Python第六章-函数06-高阶函数

    函数的高级应用 二.高阶函数 高级函数, 英文叫 Higher-order Function. 那么什么是高阶函数呢? 在说明什么是=高阶函数之前, 我们需要对函数再做进一步的理解! 2.1 函数的本 ...

  9. 《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算(一)

    http://www.cnblogs.com/batteryhp/p/5046450.html 对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生 ...

随机推荐

  1. 关于thinkphp控制器引用model里的方法的一点收获

    有时候真的是很绕,为了这一点点收获,我几乎花了一天的时间.当我弄明白了的那一刻,我.........好吧,写到这里,我发现不能换行.好吧,就这样吧,开始说正题:要想在controler从model引用 ...

  2. Maven中settings.xml的配置项说明精讲

    1.Maven的配置文件(Maven的安装目录/conf/settings.xml ) 和 Maven仓库下(默认的Maven仓库的是用户家目录下的.m2文件,可以另行制定)的settings.xml ...

  3. C#中一些默认的预定义属性

    C#中一些默认的预定义属性,见下表: 预定义的属性 有效目标 说明 AttributeUsage Class 指定另一个属性类的有效使用方式 CLSCompliant 全部 指出程序元素是否与CLS兼 ...

  4. [转载] HBase vs Cassandra:我们迁移系统的原因

    转载自http://www.csdn.net/article/2010-11-29/282698 我的团队近来正在忙于一个全新的产品——即将发布的网络游戏www.FightMyMonster.com. ...

  5. JavaScript数据可视化编程学习(二)Flotr2,雷达图

    一.雷达图 使用雷达图显示多维数据. 如果你有多维的数据要展示,那么雷达图就是一种非常有效的可视化方法. 由于雷达图不常用,比较陌生,所以向用户解释的时候有一些难度.注意使用雷达图会增加用户认知负担. ...

  6. CTF 文件包含与伪协议

    正巧在写代码审计的文章,无意间看到了一篇CTF的代码审计,CTF题目很好,用的姿势正如标题,文件包含和伪协议. 先放出原文链接(http://www.freebuf.com/column/150028 ...

  7. 超级有用的Vim命令

    你是否曾经烦恼,每次编辑vim文件,想要跳到一行结尾,需要按多次右键,每次想找到某个字符的位置,都得用肉眼去观察,每次想跳到文件结尾,都要按多次向下键.现在,你不必担心这些繁杂的过程,因为我们完全可以 ...

  8. 项目实战——企业级Zabbix监控实战(一)

    项目实战--企业级Zabbix监控实战 实验一:Zabbix监控的搭建 1.实验准备 centos系统服务器3台. 一台作为监控服务器, 两台台作为被监控节点, 配置好yum源. 防火墙关闭. 各节点 ...

  9. ExpandableListView使用

    相关博客 ExpandableListView使用 博客内容记录 场景 有时候,使用ListView并不能满足应用程序所需要的功能.有些应用程序需要多组ListView,这时候我们就要使用一种新的控件 ...

  10. C#开发Windows窗体应用程序的步骤

    使用C#开发应用程序时,一般包括创建项目.界面设计.设置属性.编写程序代码.保存项目.程序运行等6个步骤. 1.创建项目 在Visual Studio2017开发环境中选择“文件”→“新建”→“项目” ...