人生苦短我用Python 第三周 函数周
函数的定义:
1,def 函数名(参数1,参数2......):
“注释:函数的作用和参数,增加可读性”,
2,函数体
3,返回值
最简单的函数:
def func():
print('hello world')
函数名后的括号内的参数的顺序是:位置参数,*args,默认参数,**kwargs
函数的调用:函数名()
def func():
print('hello world') func()
函数名的本质:函数名相当于变量名指定内存内的一个位置,可以做参数,返回值
函数的参数:
实参:位置传参,关键字传参,动态传参
形参:位置参数(必须传值,不然报错),默认参数(可以不传值,就是默认参数的值,也可以传值,传值就是实参的值),动态参数(*args(必须以位置传参的方式传参,得到的结果是元祖类型),**kwargs(必须以关键字传参,得到的返回值是字典类型))
函数的返回值:
关键字: return
有返回值:
返回一个值:有一个变量接收
返回多个值:可以用一个变量来接收,也可以用多个变量来接收,有多少个返回值,就用多少个变量来接收。
无返回值:
三种情况:1,不写return 2,只写return 3,写return none
命名空间
命名空间:
内置命名空间(存着Python 为我们提前准备好的一些用法 input print等之类的)
全局命名空间
局部命名空间
取值顺序:
在局部命名空间:局部————》全局————》内置
在全局命名空间:全局————》内置
x = 1
def f(x):
print(x) f(10)
print(x)
输出的f(10)结果是10,print(x)的值是1,全局的取不到局部的值。
作用域
全局作用域(内置命名空间,全局命名空间)
局部作用域(局部命名空间)
global 关键字
a = 10
def func():
global a
a = 20 print(a)
func()
print(a)
修改掉全局的a=10
函数的嵌套
简单的嵌套:
def f1():
print("in f1")
def f2():
print("in f2") f2()
f1()
作用域
def f1():
a = 1
def f2():
a = 2
f2()
print('a in f1 : ',a) f1()
调用f1得到的是print为a=1,print那个在外部那个作用域,调用不了内部的a=2.
闭包:内部函数包含对外部作用域而非全剧作用域名字的引用,该内部函数称为闭包函数
简单的闭包函数代码:
def func():
a=1
def func1(a):
print(a)
开放封闭原则:对修改时封闭的,对扩展是开放点,所以有了装饰器函数
装饰器函数:和伪装时期函数呢?很简单,我理解的就是在不改变你要装饰的那个函数调用方法,和内部函数体的情况下,自己编一个闭包(你编肯定是编不了了,Python已经为你准备好了,你用那个模式就可以了)函数,把要装饰的那个函数变一种方法(这种方法你也想不出来了,Python也帮你想好了,你理解意思就可以了)放到里面,起到到什么作用呢?作用就是在这个函数前后做一些功能达到你想要的结果.
固定的装饰器函数(python给你准备好的)
def wrapper(f):
def inner(*args,**kwargs):
'''这个函数执行前要做的额'''
ret = f(*args,**kwargs) # 这个就是下面要被修饰的函数
'''这个函数执行之后要做的'''
return ret
return wrapper # 这个就是装饰函数 @wrapper # func = wrapper(func) 他就是被装饰的函数 语法糖
def func():
print("henllo world") func()
带参数的装饰器函数
F = False
def outer(flag):
def wrapper(func):
def inner(*args,**kwargs):
if flag:
print('before')
ret = func(*args,**kwargs)
print('after')
else:
ret = func(*args, **kwargs)
return ret
return inner
return wrapper @outer(F) #-->@wrapper -->hahaha = wrapper(hahaha) #-->hahaha == inner
def hahaha():
print('hahaha') @outer(F) #shuangww = outer(shuangww)
def shuangww():
print('shuangwaiwai') shuangww()
hahaha()
多个装饰器函数也可以装饰一个函数
def wrapper1(func):
def inner():
print('wrapper1 ,before func')
func()
print('wrapper1 ,after func')
return inner def wrapper2(func):
def inner():
print('wrapper2 ,before func')
func()
print('wrapper2 ,after func')
return inner @wrapper2
@wrapper1
def f():
print('in f') f()
人生苦短我用Python 第三周 函数周的更多相关文章
- python的三个函数(eval、exec、complie)和python版RMI
一.python的三个函数: 1.eval函数: 之前已经讲过了这个函数,该函数也类似于php的eval,例如下边这个例子 eval("os.system('id')") 但是有个 ...
- Python 基础三 文件 函数
今天回顾一下之前学的文件操作相关知识点,对于文件的操作,主要有一下几部分构成: 一.文件的基础知识 1.文件操作的基本流程 文件操作其实可以分成三大部分: 1.打开文件,获取文件句柄并赋予一个变量 2 ...
- python第三课--函数
函数的作用 编程大师Martin Fowler先生曾经说过:“代码有很多种坏味道,重复是最坏的一种!”,要写出高质量的代码首先要解决的就是重复代码的问题.例如3次求阶乘: m = int(input( ...
- 新手Python第三天(函数)
Python 函数的创建 def func2(): print('haha') # 函数的返回值 # 函数的返回值,没有定义返回None, # 有一个返回值返回这个object(可以返回一个函数对象) ...
- python基础三:函数
def name(参数1,参数2,参数3,...) 可以自定义一些自己需要的函数来简化自己的工作. 如:自定义一个计算函数 def mycount(a,b,c): y=a+b-c return y ...
- Python第三周 函数详解
def 函数名(): """注释说明"""" 执行逻辑体 return 返回值 定义不带参数的函数 带参数的函数 默认参数 这个是 ...
- Python基础三. 函数、lambda、filter、map、reduce
一.概述 函数, 就是用一些语句组织起来实现一组特定的功能, 用来重复调用. 函数的作用及意义:最大化的重用代码和最小化的代码冗余以及对流程的分解. Python中有哪些函数: 内建的函数 第三方模块 ...
- 简学Python第三章__函数式编程、递归、内置函数
#cnblogs_post_body h2 { background: linear-gradient(to bottom, #18c0ff 0%,#0c7eff 100%); color: #fff ...
- python学习笔记(三)函数
一.定义函数 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 在Python中,定义一个函数要使用def语句,依次写出函数名.括号.括号中的参 ...
随机推荐
- 在ubuntu下使用minicom连接交换机/路由器Console口
首先下载并安装minicom sudo apt-get install minicom 然后将Console线一端连上交换机的Console口,另一端连上电脑(我这里是通过USB口连接的) 然后查看对 ...
- 在Docker Hub上查找可用的Image映像
任何人都可以创建Docker Image映像,你可以浏览Docker Hub来查找这些Image映像. 定位Whalesay 映像 打开你的浏览器,浏览Docker Hub: Docker Hub包含 ...
- 国内网站遭遇SYN攻击事如何及时解决问题
1.SYN/ACK Flood攻击:这种攻击方法是经典最有效的DDOS方法,可通杀各种系统的网络服 务,主要是通过向受害主机发送大量伪造源IP和源端口的SYN或ACK包,导致主机的缓存资源被耗 尽或忙 ...
- 浅析python 的import 模块(转)
摘要: 学习python有几天了,对import一直不是很清楚,和C里面的include是否一样,重复引入有问题么?搜索路径是怎样的?整理解决下我的疑问. 一 模块的搜索路径 模块的搜索路径都放在了s ...
- react 入门教程 阮一峰老师真的是榜样
- 转自阮一峰老师博客 React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Nati ...
- 斜率优化dp
转载自http://www.cnblogs.com/ka200812/archive/2012/08/03/2621345.html 我们知道,有些DP方程可以转化成DP[i]=f[j]+x[i]的形 ...
- R语言成功加载rJava方法
加载rJava的同时,要下载JAVA的JRE并且配置环境变量JAVA_HOME,因为rJava的调用需要java运行环境. 1.下载JRE 64位版本的JRE官网下载:http://www.java. ...
- linux指令大全
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- “军装照”背后——天天P图如何应对10亿流量的后台承载。
WeTest 导读 天天P图"军装照"活动交出了一份10亿浏览量的答卷,一时间刷屏朋友圈,看到这幕,是不是特别想复制一个如此成功的H5?不过本文不教你如何做一个爆款H5,而是介绍天 ...
- Mongodb启动&关闭
mac 下mongo的启动和关闭以及启动问题解决 mongo的安装在这:http://www.cnblogs.com/leinov/p/6855784.html Mac os mongodb数据安装路 ...