加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

5.3Python函数(三)

发布时间:2020-12-17 00:15:18 所属栏目:Python 来源:网络整理
导读:div class="toc" p class="toc-title"目录 div class="toc-list" 这是相继上一篇5.2Python函数(二)后的函数的高阶 在不改变原函数的代码,函数的变量名,函数的调用下,给函数附加新的功能,该附加的功能便是装饰器。 一般装饰器都封装成一个函数。 用闭包

<div class="toc">
<p class="toc-title">目录


<div class="toc-list">

这是相继上一篇5.2Python函数(二)后的函数的高阶

在不改变原函数的代码,函数的变量名,函数的调用下,给函数附加新的功能,该附加的功能便是装饰器。

一般装饰器都封装成一个函数。

用闭包来实现装饰器,并且用@函数名来附加

# 额外代码,实现发说说与发图片前,登陆验证
def check_logo(func):
    def inner():
        print("登陆验证……")
        func()
    return inner

功能代码块

@check_logo
def fss():
print("发说说")

@check_logo
def ftp():
print("发图片")

业务逻辑

btn_index = 2
if btn_index == 1:
fss()
else:
ftp()


<h4 id="输出效果">(3)输出效果

02.png

我们只有在内部的函数也定义接收参数就可以了,不过为了通用性

我们定义的参数形式是:不定长参数

inner(*args,**kwargs)

# 写一个装饰器
def zsq(func):
    def inner(*args,**kwargs):
        print("*" * 30)
        func(*args,**kwargs)
    return inner

写一个功能函数

@zsq
def my_sum(num1,num2):
result = num1 + num2
print(result)

@zsq
def my_sub(a,b,c):
result = a + b - c
print(result)

my_sum(1,2)
my_sub(4,b=2,c=3)


<h4 id="输出效果-1">(3)输出效果

03.png

我们在内部函数也定义返回的语句,总之要与功能函数步调一致。

result = func(*args,**kwargs) return result

# 写一个装饰器
def zsq(func):
    def inner(*args,**kwargs):
        print("*" * 30)
        result = func(*args,**kwargs)
        return result
    return inner

写一个功能函数

@zsq
def my_sum(num1,num2):
result = num1 + num2
print(result)
return result

@zsq
def my_sub(a,c):
result = a + b - c
print(result)
return result

r = my_sum(1,2)
r2 = my_sub(4,c=3)
print(r)
print(r2)


<h4 id="输出效果-2">(3)输出效果

04.png

装饰器的附加功能不是写死的,有时候也需要传递一些值,这时就需要装饰器自身传递参数。

我们只要在外部添加一层函数即可。

# 定义一个可自身传递参数的装饰器
# 就是在装饰器外面添加一层函数

def get_zsq(char):

写一个装饰器

def zsq(func):
    def inner(*args,**kwargs):
        print(char * 30)
        result = func(*args,**kwargs)
        return result
    return inner
return zsq

定义一个功能函数, @相当于一个函数

@get_zsq("=")
def my_sum(a,c):
result = a + b + c
print(result)
return result

my_sum(1,c=3)


<h4 id="输出效果-3">(3)输出效果

05.png

读取数据的一种形式。

创建:iter()

访问:next()

# iterable(可迭代对象):list,tuple,dict,string,set
# 即可以用for in 来遍历的对象

list1 = ["你好",2,"me","you"]

可以用于isinstance()来判断是否是iterable

print(isinstance(list1,list))

可以用iter()来创建迭代器

list_iterator = iter(list1)

用next()访问下一个元素

print(next(list_iterator))


<h4 id="输出效果-4">(3)输出效果

06.png

generator(生成器):是一种优雅的迭代器,就是一种特殊的迭代器。

使用生成器表达式创建

# generator(生成器):是一种优雅的迭代器
# 列表推导式
# l = [i for i in range(50) if i % 2 == 0]
# 生成器表达式--创建生成器
l = (i for i in range(50) if i % 2 == 0)
print(next(l))
print(next(l))
print(next(l))

07.png

使用yield于语句创建

#  使用yield的语句来停顿执行,创建生成器

def test():
print("a")
yield 1

print("b")
yield 2

print("c")
yield 3

print("d")
yield 4

调用函数

print(test())

访问元素

g = test()

print(next(g))

print(next(g))

print(next(g))

print(next(g))

for in 遍历元素

for i in g:
print(i)


<h4 id="输出效果-6">(3)输出效果

08.png

递归函数是一种思想,函数不断的调用自身。

# 函数A内部继续调用A函数,称递归
# 传值:从后往前传递值的过程
# 回归:从前往后回代数值的过程

求一个数的阶乘

def test(n):
if n == 1:
return 1

分解n

result = n * test(n-1)
return result

print(test(4))


<h4 id="输出效果-7">(3)输出效果

10.png

01.png

# 变量的作用域:作用范围
# 命名空间:具体的范围

g = "我是全局变量"

def test():

声明g是全局变量

global g
g = "我有全局变量修改而来"
e = "我是局部变量"
# 查看局部变量
num = locals()
print(num)

def test1():
    # 声明 e 不是当地变量
    nonlocal e
    e = "我是局部变量修改而来"
    l = "我是函数内的变量"
    # 查看局部变量
    num1 = locals()
    print(num1)

test1()

查看全局变量

num2 = globals()
print(num2)
test()
print(g)


<h4 id="输出效果-8">(3)输出效果

09.png

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读