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 函数的主要内容,如果未能解决你的问题,请参考以下文章

python使用上下文对代码片段进行计时,非装饰器

python 元组有用的函数,方法和片段。

Python代码阅读(第26篇):将列表映射成字典

VSCode自定义代码片段——声明函数

Python学习 :函数

VSCode自定义代码片段8——声明函数