Day9 Python基础之函数基础(七)
参考链接:https://www.cnblogs.com/yuanchenqi/articles/5828233.html
1.函数的定义
定义:
函数是指将一组语句的集合通过一个函数名封装起来,要想执行该函数,只需调用其函数名即可
特性:
1.代码重用(减少重复代码)
2.保持代码的一致性
3.可扩展性(方便修改)
2.函数的创建
格式
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表):
函数体
函数名的命名规则
和变量命名规则一致
形参和实参
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,
目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)
实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参
区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,
占用内存空间,数据传送单向,实参传给形参,不能形参传给实参
函数的参数
- 必备参数:必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
关键字参数:函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,
因为 Python 解释器能够用参数名匹配参数值。
- 默认参数(缺省参数):调用函数时,缺省参数的值如果没有传入,则被认为是默认值(在定义函数时已赋值)。
def print_info(name,age,sex='female'):
print('name:%s\nage:%i\nsex:%s'%(name,int(age),sex))
print_info(age=24,name='venus',sex='male')
输出结果:
name:venus
age:24
sex:male
print_info(age=24,name='venus')
输出结果:
name:venus
age:24
sex:female
关键字参数、默认参数
注:默认参数一定要跟在其它参数后面
不定长参数 :你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。
加了星号(*)的变量名会存放所有未命名的变量参数(元组)
def senior_add(*args):
sum=0
for i in args:
sum+=i
print(args)
print(type(args))
print(sum) senior_add(1,2,3,4,5,6,7)
输出结果:
(1, 2, 3, 4, 5, 6, 7)
<class 'tuple'>
28
*
加(**)的变量名会存放命名的变量参数(字典)
def print_info(**kwargs):
print(type(kwargs))
for i in kwargs:
print('%s:%s'%(i,kwargs[i])) print_info(age=24,name='venus',sex='male')
print_info(age=24,name='venus',job='IT') 输出结果:
<class 'dict'>
age:24
name:venus
sex:male
<class 'dict'>
age:24
name:venus
job:IT
**
注:(1)一定要注意*args和*kwargs的位置关系:保证 *args在*kwargs的前面,即(*args,*kwargs),传实参时也要遵照此原则
(2)形参优先级:关键字参数,默认参数,不定长未命名参数,不定长命名参数,即(name,age=22,*args,*kwargs)
很重要的传参方式
def f(*args):
print(type(args))
print(args)
f([1,2,3])
f(*[1,2,3]) 输出结果
<class 'tuple'>
([1, 2, 3],)
<class 'tuple'>
(1, 2, 3)
f(*list)
def f(**kwargs):
print(type(kwargs))
print(kwargs) f({'name':'venus'})
f(info={'name':'venus'})
f(**{'name':'venus'}) # 输出结果
报错 <class 'dict'>
{'info': {'name': 'venus'}} <class 'dict'>
{'name': 'venus'}
f(**dict)
- 补充高阶函数
def f1(n):
return n**2
def f2(n):
return n*2
def ff(a,b,func):
return func(a)+func(b) print(ff(2,3,f1))
print(ff(2,3,f2)) 输出结果:
13
10
高阶函数

函数的返回值
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
- 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
- 如果未在函数中指定return,那这个函数的返回值为None
- return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出。
作用域!!!
作用域介绍:python中的作用域分4种情况:L、E、G、B
L:local,局部作用域,即函数中定义的变量;
E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;
G:global,全局变量,就是模块级别定义的变量;
B:built-in,系统固定模块里面的变量,比如int, bytearray等。
搜索变量的优先级顺序依次是:作用域局部>外层作用域>当前模块中的全局>python内置作用域,也就是LEGB
注:全局变量在局部区域里只能查看不能对其操作,有类似的找工作笔试题:
|
g_count=10#全局变量 def f(): g_count=1 #这是允许的#局部变量 |
g_count=10 def f(): g_ count+=1 #这是不允许的 |
|
g_count=10 #定义一个全局变量 def f(): global g_count #在local里面是通过global申明一下是全局变量, print(g_count) g_count=1 #这就允许了 e_coung=3 #定义一个enclosing变量 def ff(): nonlocal e_count #在local里面是通过nonlocal申明enclosing变量 e_count+=5 |
|
小结
(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;
(2)只有模块、类、及函数才能引入新作用域;
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。
nonlocal是python3新增的关键字,有了这个 关键字,就能完美的实现闭包了。
Day9 Python基础之函数基础(七)的更多相关文章
- python学习总结 --函数基础
函数基础 ### 函数简介 - 定义:具有特定功能的一段代码 - 优点: - 可以减少代码的重复书写 - 可以将功能的实现着和使用者分开,可以提高开发效率 - 分类: - 库函数:print.inpu ...
- Python学习笔记-函数基础
函数基础 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 为什么使用函数:减少重复代码.使程序变的可扩展使程序变得易维护 1.定义一个函数 #定 ...
- Python 入门基础10 --函数基础3 函数对象、名称空间、装饰器
今日内容 1.函数对象 2.名称空间与作用域 3.函数的嵌套调用与闭包 4.装饰器 一.函数对象 1.1 定义 函数名存放的就是函数地址,所以函数名也就是对象,称之为函数对象 1.2 函数对象的应用 ...
- Python 入门基础11 --函数基础4 迭代器、生成器、枚举类型
今日目录: 1.迭代器 2.可迭代对象 3.迭代器对象 4.for循环迭代器 5.生成器 6.枚举对象 一.迭代器: 循环反馈的容器(集合类型) 每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的 ...
- Python之路-函数基础&局部变量与全局变量&匿名函数&递归函数&高阶函数
一.函数的定义与调用 函数:组织好的.可重复使用的.用户实现单一或者关联功能的代码段.函数能够提高应用的模块性和代码的重复利用率.Python提供了很多内置的函数,比如len等等,另外也可以根据自己的 ...
- python学习日记(函数基础)
修改文件(原理)--回顾 #修改文件(原理) with open('name','r',encoding='utf-8') as f,\ open('password','w+',encoding=' ...
- Python 入门基础12 --函数基础5 匿名函数、内置函数
今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...
- python学习之函数基础
第一个python函数: >>> def func_1(): ... print 'hello python' ... >>> func_1() hello pyt ...
- python学习之【第八篇】:Python中的函数基础
1.前言 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段.函数能提高应用的模块性,和代码的重复利用率. 2.函数的定义 定义函数时需要遵守以下规则: 函数代码块以 def 关键词开头 ...
随机推荐
- 数据执行保护呈灰色无法开启 用命令BCEDIT无效 请问怎么解决?
1.默认的管理员账号是关闭开不了的. 2.你重新创建个管理员账户. 3.然后登陆这个账号. 4.然后打开cmd 输入 bcdedit /set nx optin alwaysoff 这行指令.然后回车 ...
- 聚类——WKFCM的matlab程序
聚类——WKFCM的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 在聚类——WKFCM文章中已介绍了WKFCM算法的理论知识,现在用 ...
- python3编写网络爬虫15-Splash的使用
Splash是一个JavaScript渲染服务 是一个带有HTTP API的轻量级浏览器 同时对接了python的Twisted 和QT库 利用它可以实现对动态渲染页面的抓取 功能介绍 1.异步方式处 ...
- JavaScript闭包理解【关键字:普通函数、变量访问作用域、闭包、解决获取元素标签索引】
一.闭包(Closure)模糊概述 之前总觉得闭包(Closure)很抽象而且难理解,百度一下"闭包"名词,百度的解释是:“闭包是指可以包含自由(未绑定到特定对象)变量的代 ...
- SpringMVC-DispatcherServlet工作流程及web.xml配置
工作流程: Web中,无非是请求和响应: 在SpringMVC中,请求的第一站是DispatcherServlet,充当前端控制器角色: DispatcherServlet会查询一个或多个处理器映射( ...
- 【CQOI2014】危桥
[CQOI2014]危桥 Description Alice和Bob居住在一个由N个岛屿组成的国家,岛屿被编号为\(0\)到\(N-1\).某些岛屿之间有桥相连,桥上的道路都是双向的,但是一次只能供一 ...
- Linux三剑客-AWK
1.什么是awk AWK是一种处理文本文件的语言,是一个强大的文本分析工具.有统计和计算功能. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Br ...
- UVA11882-Biggest Number(DFS+最优化剪枝)
Problem UVA11882-Biggest Number Accept: 177 Submit: 3117Time Limit: 1000 mSec Memory Limit : 1 ...
- 机器学习之MCMC算法
1.MCMC概述 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Simulation,简称MC)和马尔科夫链(Markov Chain ,也简称MC).之前已经介 ...
- 转://利用从awr中查找好的执行计划来优化SQL
原文地址:http://blog.csdn.net/zengxuewen2045/article/details/53495613 同事反应系统慢,看下是不是有锁了,登入数据库检查,没有异常锁定,但发 ...