Python:函数进阶

目录

一、Python中的推导式

需求一

需求二

二、Python的全局作用域

三、Python的多参数传递

四、Python的装饰器

被装饰的方法不带参数

 被装饰的方法带参数

 带参数的装饰器

一、Python中的推导式

列表生成式是python内置的一种创建列表的方法,通过在[ ]内部执行一行for循环语句,将for循环所遍

历到的元素添加到列表中。由于编译后的字节码更少, 因此比普通的采用append方法生成列表要快很

多,不仅如此,使用列表生成式编写的代码更加简洁,通过添加if else 语句,列表生成式也能对列表里

的元素进行限制。

需求一

生成一个列表,列表里有10个元素,索引为奇数的元素值为1,索引为偶数的位置值为0

# 推导式
# for i in range(10):
#     print(i)
# 创建的列表,其中奇数位为1 偶数位为0
# [1,0,1,0]
#
a = [i for i in range(10)]
a2 = [1 if i % 2 == 0 else 0 for i in range(10)]
print(a)
print(a2)

需求二

取出以下课程分数大于94的科目以及具体分数

# 推导式
# 需求:取出以下课程分数大于94的科目以及具体分数
class_dict = {
    'c++': 90,
    'python': 93,
    'java': 95,
    'javascript': 96,
    'node.js': 94
}
b = [item[0] for item in class_dict.items()]
b1 = [item[1] for item in class_dict.items()]
print(b)
print(b1)

print("====================分割线=========================")
c = {item[0]:item[1]  for item in class_dict.items() if item[1] > 94}
print(c)
print("====================推导式分割线=========================")
dict_new = {k: v for k, v in class_dict.items() if v > 94}
print(dict_new)

二、Python的全局作用域

# 全局作用域
val = 1


# val = 1 控制台运行结果
def add():
    val = 2

# val = 2 控制台运行结果
# def add():
#     global val
#     val = 2


add()

print(val)

 

三、Python的多参数传递

参数的解体:使 *args 和 **kwargs 来调⽤函数

# 多参数传递
# 参数的解体
def res(arg1, arg2, arg3):
    print("arg1:", arg1)
    print("arg2:", arg2)
    print("arg3:", arg3)


args = ("two", 3, 5)
res(*args)
print("=============")
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
res(**kwargs)

# 如果你想在函数⾥同时使⽤所有这三种参数, 顺序是这样的:
print("=============")
args = ("two", )
kwargs = {"arg3": 3}
res("hello", *args, **kwargs)

四、Python的装饰器

闭包函数:声明在一个函数中的函数,叫做闭包函数。

闭包:内部函数总是可以访问其所在的外部函数中声明的参数和变量,即使在其外部函数被返回了之

def outer(a):
    def inner(b):
        return a + b
    return inner

a = outer(1)
# <function outer.<locals>.inner at 0x006DF898>
print(a)
# 3
print(a(2))
# 5
print(outer(3)(2))

装饰器是闭包的一种应用。 类似于java中的AOP

装饰器就是用于拓展原来函数功能的一种函数,这个函数的特殊之处在于它的返回值也是一个函数,使

用装饰器的好处就是在不用更改原函数的代码前提下给函数增加新的功能。

被装饰的方法不带参数



# **被装饰的方法不带参数**
def transaction(func):
    def wrapper():
        print("开启")
        func()
        print("关闭")

    return wrapper


@transaction
def hello():
    print("hello world")


hello()

 被装饰的方法带参数



# **被装饰的方法带参数**
def transaction(func):
    def wrapper(n):
        print("开启")
        func(n)
        print("关闭")

    return wrapper


@transaction
def hello(name):
    print(f"{name} say hello world")


hello("zhangsan")

 带参数的装饰器



def logging(level):
    def outer_wrapper(func):
        def inner_wrapper(*args, **kwargs):
            print(f"{level}: enter {func.__name__}()")
            return func(*args, **kwargs)

        return inner_wrapper

    return outer_wrapper

@logging("error")
def hello():
    for i in range(3):
        print('time.sleep(1)')

hello()

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
变量的主要包括变量的命名规则和作用域、变量的内存管理以及变量的类型转换等内容。首先,变量的命名规则和作用域非常重要。在Python中,变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线,变量名是大小写敏感的,同时要避免使用Python的关键字作为变量名。此外,变量的作用域分为全局作用域和局部作用域,全局变量在整个程序中都可以访问,而局部变量只能在其所在的函数或代码块中使用。 其次,变量的内存管理也是变量的重点内容。在Python中,变量是指向对象的引用,而不是存储对象本身。当我们创建一个变量并将其赋值为某个对象时,实际上是将变量名和对象之间的引用关系保存到内存中。当一个变量不再被使用时,Python会自动回收该变量所指向的对象的内存空间,这个过程称为垃圾回收。 最后,变量的类型转换也是变量的重要内容。在Python中,变量的类型可以动态改变,我们可以使用内置的函数行类型转换,比如int()、float()、str()等函数可以将变量转换为整型、浮点型、字符串类型。此外,我们还可以使用isinstance()函数来判断变量的类型,帮助我们在程序中更加灵活地操作变量。 综上所述,变量的内容涉及到变量的命名规则和作用域、变量的内存管理以及变量的类型转换,这些内容对于提高Python编程的效率和质量都具有重要的意义。希望大家在学习Python变量的内容时能够认真对待,加深理解,提高编程水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值