python函数修饰器定义不调用、会执行吗_python函数,调用以及装饰器

inner()

outer() # 这里的outer()是没由返回值的,

# 要想在调用outer()获取inner返回值。

def outer():

def inner():

return 'haha'

return inner

注意:return和返回值之间要有空格,可以返回任意数据类型的值

实参与形参

参数还有分别:我们调用函数时传递的这个“hello world”被称为实际参数,因为这个是实际的要交给函数的内容,简称实参。定义函数时的s1,只是一个变量的名字,被称为形式参数,因为在定义函数的时候它只是一个形式,表示这里有一个参数,简称形参。

传递多个:参数可以传递多个,多个参数之间用逗号分割。

位置参数:

1.按照位置传参

2.按照关键字传参

3.位置,关键字混合传参

默认参数:

1.将变化比较小的值设置成默认参数

2.默认参数是一个可变数据类型

命名空间和作用域:

命名空间的本质:存放名字与值的绑定关系

命名空间有三种:

1.全局命名空间

2.局部命名空间

3.内置命名空间

内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法。

命名空间加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调用时才加载)

作用域:

作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。

全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效

局部作用域:局部名称空间,只能在局部范围内生效

global 和nonlocal(python2中没有nonlocal,目的是为了替代global)

golbal:如果要在局部变量中修改全局变量,就需要在局部命名空间中对该全局变量进行声明。如果只是调用全局变量的话就不用声明,因为python中,局部命名空间内可以使用全                局变量空间和内置命名空间的变量。

a = 1

b = '不修改,只调用的话可以不用global声明'

def func():

global a

a = 10

print(a)

print(b)

func()

nonlocal

使用条件:

只能作用于内层函数的上一层函数,外部函数必须有nonlocal声明的变量,如果内部函数

内部函数声明nonlocal之前,不能再出现同名变量

nonlocal修改的是最近一层的作用空间中的变量,如果在上一层没有该变量,就会去上上一层去寻找,以此类推,如果都没有找到,就会不满足条件1,最终报错

作用:可以在内层函数中去更改上一层函数的变量(与global不同,global声明的是全部命名空间的变量)

闭包函数:

闭:内部的函数

包:外部的变量

闭包一个函数,但是这个函数必须是一个内部函数(函数内部定义的函数),而且包含了对外部作用域中变量(这个变量不包括全局变量)的引用

函数的嵌套:

嵌套调用

嵌套定义:定义在内部的函数无法直接在全局被调用

函数名的本质:

就是一个变量,保存了函数所在的内存地址

装饰器:

装饰器的形成:

import time

def func1():

print('in func1')

def timer(func):

def inner():

start = time.time()

func()

print(time.time() - start)

return inner

func1 = timer(func1)

func1()

装饰器语法糖:

import time

def timer(func):

def inner():

start = time.time()

func()

print(time.time() - start)

return inner

@timer#这就是所谓的语法糖

#==> func1 = timer(func1)

def func1():

print('in func1')

func1()

装饰器的本质:一个闭包函数

装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

带参数的装饰器:

def timer(func):

def inner(a):

start = time.time()

func(a)

print(time.time() - start)

return inner

@timer

def func1(a):

print(a)

func1(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值