Python:函数进阶

news2024/9/21 0:45:43

目录

一、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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68331.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

会话跟踪技术(Cookie和Session)

目录概述Cookie基本使用Cookie原理Cookie 存活时间Session基本使用Session原理Session使用细节Seesion 销毁&#xff1a;Cookie和Session的对比最后概述 会话&#xff1a; 用户打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&…

Mac系统安装Kafka 3.x及可视化工具

写在前面&#xff1a;博主是一只经过实战开发历练后投身培训事业的“小山猪”&#xff0c;昵称取自动画片《狮子王》中的“彭彭”&#xff0c;总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域&#xff0c;如今终有小成…

网络工程师备考3章

注&#xff1a;本章考察较少&#xff0c;冲刺阶段可直接跳过 最常考点&#xff1a;帧中继&#xff0c;HDLC 3.1 公共交换电话网 英文&#xff1a;Public Switched Telephone Network ,PSTN 这种主网架构已经被淘汰了&#xff0c;现在的电话骨干网都是数字信号&#xff0c;目…

web课程设计网页规划与设计 基于HTML+CSS+JavaScript制作智能停车系统公司网站静态模板

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Java中三种I/O模型 BIO,NIO,AIO

UNIX 系统下&#xff0c; IO 模型一共有 5 种&#xff1a; 同步阻塞 I/O、同步非阻塞 I/O、I/O 多路复用、信号驱动 I/O 和异步 I/O。 这也是我们经常提到的 5 种 IO 模型 &#xff08;1&#xff09;同步阻塞I/O模型 应用程序发起read调用后&#xff0c;一直处于阻塞状态 内…

BP综述:自闭症中基于功能连接体的预测模型

自闭症是一种异质性的神经发育疾病&#xff0c;基于功能磁共振成像的研究有助于推进我们对其对大脑网络活动影响的理解。我们回顾了使用功能连接和症状的测量的预测建模如何帮助揭示对这种情况的关键见解。我们讨论了不同的预测框架如何进一步加深我们对复杂自闭症症状学基础的…

Word处理控件Aspose.Words功能演示:在 Python 中将 Word DOCX 或 DOC 转换为 PDF

Word 到PDF是最流行和执行最广泛的文档转换之一。DOCX或DOC文件在打印或共享之前会转换为 PDF 格式。在本文中&#xff0c;我们将在 Python 中自动将 Word 转换为 PDF。步骤和代码示例将演示如何使用 Python 将 Word DOCX 或 DOC 转换为 PDF。此外&#xff0c;您将了解自定义 W…

Stable Diffusion模型阅读笔记

Stable Diffusion模型 什么是Stable Diffusion模型 一般而言&#xff0c;扩散是在图像中反复添加小且随机的噪声。与之相反&#xff0c;Stable Diffusion模型是一种将噪声生成为图像的机器学习模型。经过训练&#xff0c;它可逐步对随机高斯噪声进行去噪以获得感兴趣的样本&a…

Apache Hop Transforms Samples【持续完善中】

Samples transforms 1、abort-basic.hpl 根据筛选器行转换的结果中止此管道 第一步:添加Data grid转换,Meta部分维护字段。 Data部分维护数据,如下图。 第二步:添加filter rows,如下图 按照如下截图进行修改: 第三步:添加Abort 第四步:执行截图如下:

[附源码]Python计算机毕业设计Django学生综合数据分析系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Golang 【basic_leaming】fmt.Print, fmt.Printf, fmt.Println 的区别

阅读目录fmt 包fmt.Print 原样输出fmt.Printf 格式输出fmt.Println 值 空格 输出换行输出Println 和 Print 区别Println 和 Printf 区别变量类型推导方式定义变量使用 Printf打印一个变量的类型fmt 包 fmt format&#xff0c;是一种格式化输出函数汇总包&#xff0c;用于格式…

这款国产API工具也太强了吧!让我放弃了postman

为什么弃用postman转用Eolink? 程序员在接口开发完成后都通常需要自测&#xff0c;当返回结果根据符合预期时&#xff0c;则表示代表接口可用。自己以前用的是postman来进行接口测试&#xff0c;但postman只能进行接口测试&#xff0c;有局限性、很多场景不能满足我的需求&am…

jenkins集成sonarqube

一、在linux上面安装sonarqube 相关文件下载地址 &#xff08;1&#xff09;下载sonarqube-9.6.1.59531.zip解压 &#xff08;2&#xff09;创建用户 useradd sonar passwd sonar(3)赋权 chown -R sonar.sonar /opt/sonarqube/sonarqube-9.6.1.59531(4)切换用户&#xff0c…

【C++】C++11新特性

目录 一.列表初始化initializer_list 1.什么是列表初始化 2.列表初始化的原理 二.auto/decltype/nullptr 1.auto - 自动类型推导 2.decltype - 指定类型 3.nullptr - C空指针 三.范围for 四.右值引用/移动构造/移动赋值/万能引用/完美转发 1.什么是右值 2.左值与右值…

react面试题总结一波,以备不时之需

React组件的构造函数有什么作用&#xff1f;它是必须的吗&#xff1f; 构造函数主要用于两个目的&#xff1a; 通过将对象分配给this.state来初始化本地状态将事件处理程序方法绑定到实例上 所以&#xff0c;当在React class中需要设置state的初始值或者绑定事件时&#xff…

首版20年后开源反病毒引擎 ClamAV 1.0 发布

导读ClamAV 是一个开源的&#xff08;GPL&#xff09;反病毒引擎&#xff0c;用于检测木马、病毒、恶意软件和其他恶意威胁。它为用户提供了许多实用程序&#xff0c;包括一个可扩展的多线程守护程序、一个命令行扫描器和一个自动更新数据库的高级工具。 ClamAV 是一个开源的&a…

rust编译器教我做人,为啥还要学习rust语言,因为想使用rust做一些底层服务,更深入的研究技术。

目录1&#xff0c;继续学习Rust语言&#xff0c;确实学习成本很高&#xff0c;学了两周还在学习入门概念&#xff0c;和编译器斗争2&#xff0c;rust学习曲线非常高&#xff0c;为啥还要坚持学习&#xff0c;一直想写一些服务研究研究底层的技术啥的3&#xff0c;rust对前端也有…

git回退版本 简单易懂

进行git版本回退的时候 查看git提交的版本 使用git log查看提交日志&#xff1a; git loggit log命令显示从最近到最远的提交日志 如果嫌输出信息太多&#xff0c;可以试试加上–prettyoneline参数,代码如下&#xff1a; $ git log --prettyoneline 日志会进行减少 根据…

【分布式系统】分布式缓存Redis集群原理与环境搭建

文章目录集群原理缓存分片算法Hash算法一致性Hash算法二者区别集群方案通信协议缓存路由缓存扩展保障可用性搭建redis安装步骤集群安装基本配置启动节点创建集群访问集群添加主节点加入集群分配槽添加从节点切换从节点删除节点手动切换故障升级节点问题记录安装gccjemalloc/jem…

3.21 小红书薯条改版了,都改了些什么呢?【玩赚小红书】

一、薯条是什么&#xff1f; 咱们在座的大部分都是小红书深度用户&#xff0c;相信对薯条再熟悉不过了。 「薯条」 就是小红书自助式的投放工具&#xff0c;通过投放薯条&#xff0c;能给我们提供更多的曝光度&#xff0c;带来更多的赞藏评&#xff0c;从而提高内容的转化率&…