python 函数
Posted bestskye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 函数相关的知识,希望对你有一定的参考价值。
函数对象
在面向对象编程中 一切皆对象
具体的体现
1.函数可以被引用
2.函数可以作为函数的参数
3.函数可以作为函数的返回值
4.可以被存储到容器类型中
def pay(): print(‘支付‘) def save(): print(‘存钱‘) def cheak(): print(‘查看‘) dic={‘1‘:pay,‘2‘:save,‘3‘:cheak} while True: l=[‘支付‘,‘存钱‘,‘查看‘] for i,k in enumerate(l): print(i+1,k) cmd=input(‘>>>:‘) if cmd in dic: dic[cmd]() else: print(‘指令错误‘)
2.函数嵌套
1.嵌套调用 在一个函数中调用了另一个函数
2.嵌套定义 在一个函数中定义了另一个函数
定义在函数内的函数 只能函数内使用 外界不能访问
def func1(): print("func1") def func2(): print("func2") func1() func2()
def func1(): print("func1") def func2(): print("func2") func2() func1()
3.函数的名称空间
存储名称的空间
名称空间的分类
内置名称空间 存储解释器自带的一些名称与值的对应关系
(python解释器启动时创建 所有代码全部执行完毕 关闭解释器时 销毁)
print len max min
全局名称空间 哪些数据会存储在全局空间?
文件级别的名称 只要你的名字的定义是顶着最左边写的就在全局空间
除了内置的函数内的 都在全局中
(执行py文件创建全局名称空间 关闭解释器时 销毁)
局部名称空间 只要是函数内的名称就是局部的
(调用函数时创建 函数执行完毕就销毁)
名称空间的加载顺序
内置的 -> 全局的 ->局部的
名称的查找顺序
局部 -> 全局的 -> 内置的
4.函数的作用域
作用域(作用范围)
域 指的是区域 范围的的意思
全局的名称空间和内置的名称空间 在使用上没什么区别
局部的和全局的内置的 就区别了 局部定义的只能在局部使用
给三个空间划分范围
全局的和内置可以划分为同一个范围
global 表示的全局范围 就是所谓的全局作用域
局部的单独划分为一个范围
local 局部作用域
globals()
locals()
print(locals())#查看全局作用域,当locals在全局作用域时,功能和globes相同 print(globals()) def func(): a = 100 print(locals())#查看局部作用域 func()
age = 18 def func2(): # 明确声明 要使用全局中的age global age age = 19 print(age) func2() print(age)
a = 1 def func3(): a = 10 def inner(): # 明确声明 要使用上一中的 a 如果上一层没有 则找上上层 但是注意 不能找到全局中的 nonlocal a a = 100 print(a) inner() print("这是func3中a",a) func3() print(a)
5.闭包函数
age = 20 # 如下就是一个闭包函数 def fun1(): age = 18 def inner(): print("hello") print(age) # 在返回这个内部的函数时 不是单纯的返回函数 还把函数中访问到的局部名称一起打包了 # 相当于将内部函数与 访问的数据打包在一起了 闭包这个名字就是这么得来的 return inner f = fun1() # f 就是inner f() # 函数的作用域在定义时就固定了 与调用没有关系
# 闭包函数的模板 def func2(): a = 1 b = 10 def inner(): print(a) print(b) return inner
什么是闭包函数
1.定义在另一个函数内的函数
2.内部的的函数访问了外部的名称数据 注意 不包含全局的)
6.装饰器
什么是装饰器
什么是装饰 给一个已有的对象(一个函数) 添加新的功能
为什么要装饰 增强功能
器 指一个工具 在python中 值得是具备某个功能的函数
简单的说:装饰器就是 一个用于给其他函数增加功能的函数
import time def download(): print(‘开始下载xxx.mp4‘) time.sleep(2) print(‘xxxx.mp4 下载完成‘) # 请你统计下载耗时 start_time = time.time() download() end_time = time.time() print(‘下载耗时‘,(end_time-start_time)) def download2(): start_time = time.time() print("开始下载xxx.mp4") time.sleep(2) print("xxxx.mp4 下载完成!") end_time = time.time() print("下载耗时", (end_time - start_time)) download2()
def outter(func): def inner(): strat_time = time.time() func() end_time = time.time() print(‘下载耗时‘,(end_time-start_time)) return inner download=outter(download) download()
以上是关于python 函数的主要内容,如果未能解决你的问题,请参考以下文章