Python学习 :函数
函数
函数(Functions)
是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是调用(Calling)函数。
函数的作用:
1、减少重复代码
2、方便修改,更易扩展
3、保持代码的一致性
函数的创建:
def 函数名(参数1,参数2...):
函数体(语句块)
函数名的命名规则:
必须以下划线和小写字母为开头,一般用小写字母和单下划线、数字等组合函数名是区分大小写的
函数体(语句块)前,需要缩进4个空格
调用函数时一定记得要加括号
函数名后面的括号中,可以有参数列表,也可以没有参数
函数名是区分大小写的
形参与实参:
形参:形势参数,在函数中定义时的参数,不实际存在,是虚拟的变量
实参:实际参数,在调用函数过程中使用的参数,传给形参
区别:形参是虚拟的,不占用内存空间,只有在被调用时才分配内存单元
实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
函数的参数
一、必需的参数:
必需参数须以正确的顺序传入函数中,调用时的顺序必须和函数声明时一致
二、关键字参数
函数可以通过关键字参数来确定传入的参数值,使用关键字参数允许函数调用时参数时顺序与声明时不一致,关键字参数在实参中添加
def print_info(name,age,job):print('Name: %s' %name)print('Age: %d' %age)print('Job: %s' %job)print_info('Mike',20,'student') #必需参数
print_info(name='Mike',age=20,job='student') #关键字参数
三、默认参数(缺省参数)
调用函数时,默认参数的值如果没有被传入,即为默认值,默认参数可以在形参中添加
def print_info(name,age,job='student'): #默认参数需要跟在其他参数后print('Name: %s' %name)print('Age: %d' %age)print('Job: %s' %job)print('---------------------')
print_info('Mike',20)
print_info('Alex',20)
print_info('John',35,'teacher') #改变默认参数的值
四、不定长参数
当处理比当初声明时更多的参数时,可以使用不定长参数,声明时不需要进行命名。
星号(*)的变量名会存放所有未命名的变量参数,使用一个元组来进行储存。
两个星号(**)的变量名会存放命名的变量参数,使用字典中的键值对来进行储存
注意:关于不定长参数的位置:*args参数放在左边,**args参数放在右边
如果有默认参数存在,放在左边,关键字参数放在最左边,最后是不定长参数
Eg.*args
def add(*args): #*args表示函数接收不定长的参数print(args)sum = 0for i in args: # args为一个元组sum += iprint(sum)
add(1,2,3)
Eg.**kwargs
def print_info(*args,**kwargs):print(args)print(kwargs)for i in kwargs:print('%s : %s' %(i,kwargs[i]))
print_info('John',35,'teacher',hobby='reading') #**kwargs数据会被处理成为一对键值对放入字典中
函数的返回值
获取函数的执行结果,可以使用return语句来执行把结果返回
return的作用:1、结束当前函数 2、返回某个对象的值
注意:1.函数默认的return值为None,即如果未指定return语句,函数默认返回None
2.return可以返回多个对象,并把多个对象封装成为一个元组,作为一个整体输出
函数的作用域
4种不同的作用域:
L:local,局部作用域,也称本地作用域,函数中定义的变量;
E:enclosing,嵌套作用域,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:global,全局作用域,全局变量,就是模块级别定义的变量;
B:built-in,内建作用域,系统固定模块里面的变量,例如int,bytearray;
a = 0 # global
d = 4 # global
def outer():c = 3 # enclosingd = 5 # enclosingglobal aa = 1 # 由 enslosing 修改为 globaldef inner():b = 2 # locald = 6 # localprint('本地作用域中变量b:',b)print('此时的变量d:',d)inner() # 调用inner函数print('嵌套作用域中变量c:',c)#print(b) 语句会报错(name 'b' is not defined),因为python找不到变量b声明的值outer()
print('全局作用域中变量a:',a)
>>>本地作用域中变量b: 2此时的变量d: 6嵌套作用域中变量c: 3全局作用域中变量a: 1
global关键字
在内部作用域中,当要修改外部作用域(全局作用域)的变量的时候,这时可以使用global关键字
a = 0 # global
def outer():global aa = 1 # 将 enclosing 修改为 global
print('-------------------')
print('修改前:', 'a =', a)
outer() # 调用outer函数
print('-------------------')
print('修改后:', 'a =', a)
>>>-------------------修改前: a = 0-------------------修改后: a = 1
nonlocal关键字
在嵌套作用域中,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量时,这时可以使用nonlocal关键字
def outer():a = 1 # enclosingb = 7 # enclosingdef inner():a = 2 # localnonlocal bb = 8 # 将 local 修改为 enclosingprint('-------------------')print('修改前:','a =',a,'b =',b) #没有调用inner函数前,a,b的值inner()print('-------------------')print('修改后:','a =',a,'b =',b) #调用了inner函数,a的值依然没有修改,因为a=2是在local中
outer()
>>>-------------------修改前: a = 1 b = 7-------------------修改后: a = 1 b = 8
注意:
- 搜索变量的优先级顺序:作用域局部>>外层作用域>>当前模块中的全局>>python内置作用域;
- 只有模块、类以及函数才能引入新的作用域;
- 对于一个变量,内部作用域先声明就会覆盖外部变量,倘若不声明直接使用,就会使用外部作用域的变量;
- 内部作用域要修改外部作用域变量的值时,修改全局变量要使用global关键字,修改嵌套作用域变量要使用nonglobal关键字;
转载于:https://www.cnblogs.com/ArticleYeung/p/9782763.html
Python学习 :函数相关推荐
- Python学习—函数
函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 1.定义函数 Python 定义函数使用 def 关键字,一般格式如下: def ...
- python学习——函数及其参数
函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率.严格来说python只有函数,没有过程,人们理解的函数都是带有return的,而过程 ...
- python学习--函数例子
1 #!/usr/bin/env python3 2 # -*- coding:utf-8 -*- 3 4 #01 函数的定义,调用 5 #生日歌 6 def happy(): 7 print(&qu ...
- Debian Linux下的Python学习——函数
python函数通过def关键字定义.def关键字后跟一个函数的标识符名称,然后跟一对圆括号.圆括号之中可以包括一些变量名,该行以冒号结尾.接下来是一块语句,它们是函数体. 1.无参数函数(函数不带参 ...
- python学习-函数(定义、可变参、小练习(列表最小值函数))
函数目录 定义 可变参函数 自定义列表最小值函数 定义 函数定义使用关键字def,可以不带参数,也可以带参数,带参数的函数,可以使用位置参数,详见示例: str1 = 'sadf'def printV ...
- python学习——函数
函数 内建函数,如print() 用户自定义函数 一.函数定义法则 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). def 函数名(参数列表): 函数体 函数内容以冒号 : 起始 ...
- 小猿圈python学习-函数的递归
求100不断除以2直到商为0为止,打印每次除的商 用循环实现 n = 100 while n > 0: n = int(n/2) print(n) 输出: 50 25 12 6 3 1 0 如果 ...
- Python学习 - 面向对象之多态
Python学习 - 语法入门:https://blog.csdn.net/wanzijy/article/details/125287855 Python学习 - 数据类型:https://blog ...
- python eval 入门_Python学习笔记整理3之输入输出、python eval函数
Python学习笔记整理3之输入输出.python eval函数 来源:中文源码网 浏览: 次 日期:2018年9月2日 Python学习笔记整理3之输入输出.python eval函数 ...
- 整理了7道Python函数的练习题,希望对你学习函数有帮助
1.简述普通参数,指定参数,默认参数,动态参数的区别 普通参数:以正确的顺序传入函数,调用时数量必须和声明的一样 指定参数:参数和函数调用关系密切,函数调用使用关键字参数来确定传入的参数值,参数 允许 ...
最新文章
- 洛谷P3254 圆桌问题(最大流)
- 浅谈Android系统开发中LOG的使用【转】
- 解决网络故障的一般方法
- 解决zip包安装python pip的安装问题
- 如何设置mysql的权限_mysql 权限控制
- 椭圆形中间一个大写的v_静安区椭圆形桥梁空心板橡胶气囊,方形桥梁板橡胶气囊_冠桥橡胶...
- _百万内最魔性的GT跑车 测试捷豹F-TYPE P380四驱版
- Oracle备份还原操作方法
- pkg_resources.DistributionNotFound: The 'psutil=5.6.1; platform_python_implementation== 报错解决
- 机房重构-panel控件
- Pano2VR 展示全景图
- php 修改文件的权限_授予PHP写入文件和文件夹的权限
- Python学习笔记-2017.5.4thon学习笔记-2017.5.19
- [gmoj 3505]【NOIP2013模拟11.4A组】积木
- 怎么查看网站的域名 如何查询网站的IP地址
- php webshell探索-常见小马
- linux下调试域格CLM920 NC5 pppd拨号
- 给word文档加水印
- Python编程:从入门到实践——列表简介(第三章+课后答案)
- 【Teradata】windows部署安装Teradata数据库(附虚拟机扩展包)