流畅的python--小技巧总结

对于python菜鸟来说,只看基本教程后的结果就是看是看过了,但依然不会用,遇事先百度; 此文整理了一些python区别于js的一些小技巧(鄙人前端学py),可以快速高效实现功能,当个笔记,后面会持续更新

版本:python3.x

列表推导listcomps和生成器genexps表达式

列表推导和生成器表达式是Python中非常强大和常用的语法。它们可以让你更加简洁和高效地创建和操作列表和生成器。

  • 列表推导是一种用来生成新列表的简洁方式。它允许你在一行代码里使用for循环来对列表进行转换、筛选或者其他操作。例如,下面的代码将生成1到10的平方数列表:
squares = [x**2 for x in range(1, 11)]
print(squares)   # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

ps:只用列表推导来生成新列表,且尽量保持简短

  • 生成器表达式与列表推导类似,但它们返回一个生成器对象,而不是一个列表对象。生成器表达式的语法和列表推导几乎相同,只是用括号替代了方括号。例如,下面的代码将生成1到10的平方数生成器:
squares = (x**2 for x in range(1, 11))
print(squares)   # 输出: <generator object <genexpr> at 0x7fda8d8f0c10>

生成器表达式的优点是它们可以逐个地生成元素,而不是一次性生成整个列表。这使得生成器表达式在处理大量数据时非常高效(内存中不会留下一个长list)。例如,下面的代码使用生成器表达式来计算1到1000000的平方和:

squares = (x**2 for x in range(1, 1000001))
sum_of_squares = sum(squares)
print(sum_of_squares)   # 输出: 333333833333500000

生成器表达式有很多用途。其中一个是在处理大量数据时节省内存。另一个用途是可以用来创建无限序列,因为生成器可以无限生成元素而不会耗尽内存。例如,下面的代码使用生成器表达式创建了一个无限的斐波那契数列:

fibonacci = (x if x <= 1 else fibonacci[x-2] + fibonacci[x-1] for x in range(0, float('inf')))

这个生成器表达式将不断生成斐波那契数列中的下一个数,直到程序被强制停止或内存不足为止。这种方法可以用来处理需要无限数据的问题,例如流处理或数学问题。

字典和集合推导式

除了列表推导和生成器表达式之外,Python还支持字典推导和集合推导。字典推导和集合推导的语法类似于列表推导,但它们生成的是字典或集合对象。字典推导的语法是{key: value for item in iterable},其中keyvalue是字典键和值的表达式,item是可迭代对象中的每个元素。例如,下面的代码使用字典推导来生成一个从1到10的数字的平方数字典:

squares = {x: x**2 for x in range(1, 11)}
print(squares)   # 输出: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}

集合推导的语法和字典推导类似,只是用花括号替代了方括号。例如,下面的代码使用集合推导来生成一个从1到10的数字的平方集合:

squares = {x**2 for x in range(1, 11)}
print(squares)   # 输出: {64, 1, 4, 36, 9, 16, 49, 81, 25, 100}

美化打印JSON格式

你可以使用Python中的json模块来美化打印JSON格式。具体来说,你可以使用json.dumps()函数,它提供了一个indent参数,用于指定缩进级别。例如,下面的代码演示了如何使用json.dumps()函数来打印一个JSON格式的字典,使其更易读:

import json

my_dict = {'name': 'Alice', 'age': 25, 'friends': ['Bob', 'Charlie', 'David']}

print(json.dumps(my_dict, indent=4))

打印结果:

{
    "name": "Alice",
    "age": 25,
    "friends": [
        "Bob",
        "Charlie",
        "David"
    ]
}

计算程序的执行时间

你可以使用Python内置的time模块来计算程序的执行时间。具体来说,你可以使用time.time()函数来获取当前时间,然后在程序执行结束时再次使用该函数来获取时间并计算差值。例如,下面的代码演示了如何计算一个简单for循环的执行时间:

import time

start_time = time.time()

# 程序代码开始
for i in range(1000000):
    pass
# 程序代码结束

end_time = time.time()

print("程序执行时间:", end_time - start_time, "秒")

这个代码演示了如何使用time模块来计算一个for循环的执行时间。在执行程序时,它将打印出程序执行的总时间(以秒为单位)。你可以将你自己的程序代码放在“程序代码开始”和“程序代码结束”之间,以计算它的执行时间。

在Python中,***运算符的作用区别:

在Python中,***运算符都是用来扩展参数列表的。它们的主要区别在于:

  • *运算符可以用来解包一个可迭代对象(如列表或元组),将它们作为位置参数传递给函数。例如,如果你有一个包含三个元素的列表,你可以使用``运算符将它们解包成三个独立的元素:
    my_list = [1, 2, 3]
    print(*my_list)  # 输出: 1 2 3

  • **运算符则可以用来解包一个字典,将它们作为关键字参数传递给函数。例如,如果你有一个包含两个键值对的字典,你可以使用**运算符将它们解包成两个关键字参数:

    my_dict = {'a': 1, 'b': 2}
    my_function(**my_dict)  # 等同于 my_function(a=1, b=2)

另外,***运算符也可以在函数定义时用来接受任意数量的位置参数和关键字参数。在函数定义时,*args表示可以接受任意数量的位置参数,**kwargs表示可以接受任意数量的关键字参数。例如,下面的代码定义了一个函数,它可以接受任意数量的位置参数和关键字参数:

    def my_function(*args, **kwargs):
        for arg in args:
            print(arg)
        for key, value in kwargs.items():
            print(key, value)

    my_function(1, 2, 3, name='Alice', age=25)
    # 输出:
    # 1
    # 2
    # 3
    # name Alice
    # age 25


在调用函数时,你也可以使用***运算符来传递参数。例如,下面的代码将一个列表和一个字典作为参数传递给函数:

    my_list = [1, 2, 3]
    my_dict = {'name': 'Alice', 'age': 25}
    my_function(*my_list, **my_dict)
    # 输出:
    # 1
    # 2
    # 3
    # name Alice
    # age 25


list.sort 和sorted的异同

list.sort()方法是用来对列表进行排序的,它会改变原列表。该方法没有返回值,因此调用它时不需要赋值。sorted()函数也可以对可迭代对象进行排序,但是它会返回一个新的已排序的列表,不会改变原列表。以下是list.sort()sorted()的参数及其解释:

  • key:指定一个函数,该函数接受一个参数并返回用于排序的键。例如,如果要按照字符串长度对列表进行排序,则可以将key参数设置为len函数。这个参数的默认值是恒等函数(identity function),也就是默认用元素自己的值来排序
  • reverse:如果设置为True,则排序规则会反转,即升序变为降序,降序变为升序。默认为False,即升序排序。

查看一个对象(如模块、类、实例等)的所有方法和属性

你可以使用Python内置的dir()函数来查看一个对象(如模块、类、实例等)的所有方法和属性。例如,下面的代码演示了如何查看Python内置的math模块的所有方法和属性:

    import math

    print(dir(math))

这个代码将打印出math模块的所有方法和属性的列表。你可以将你自己的对象放在dir()函数中,以查看它的所有方法和属性。

用bisect来管理已排序的序列

bisect模块提供了一些用于管理已排序序列的函数。一般来说,这些函数可以被用来搜索序列中某个元素的插入位置,或是查找序列中某个元素的位置。下面是一些常用的函数:

  • bisect.bisect_left(a, x, lo=0, hi=len(a)):在已排序的序列a中查找元素x的插入位置(左侧)。该函数会返回一个整数i,满足以下条件:

    • 对于任意j < i,都有a[j] < x;-
    • 对于任意j >= i,都有a[j] >= x

    参数lohi分别指定了查找的起始位置和结束位置,默认值为0len(a)

  • bisect.bisect_right(a, x, lo=0, hi=len(a)):在已排序的序列a中查找元素x的插入位置(右侧)。该函数会返回一个整数i,满足以下条件:

    • 对于任意j <= i,都有a[j] <= x
    • 对于任意j > i,都有a[j] > x

    参数lohi分别指定了查找的起始位置和结束位置,默认值为0len(a)

  • bisect.bisect(a, x, lo=0, hi=len(a)):在已排序的序列a中查找元素x的插入位置(右侧)。该函数等价于bisect_right函数。

  • bisect.insort_left(a, x, lo=0, hi=len(a)):在已排序的序列a中插入元素x,并保持序列有序(左侧)。该函数会将元素x插入到序列中,使得序列仍然保持有序。该函数没有返回值。参数lohi分别指定了查找的起始位置和结束位置,默认值为0len(a)

  • bisect.insort_right(a, x, lo=0, hi=len(a)):在已排序的序列a中插入元素x,并保持序列有序(右侧)。该函数等价于insort_left函数。

例如,下面的代码演示了如何使用bisect模块来管理已排序的序列:

    import bisect

    a = [1, 3, 4, 5, 6, 8, 9]

    # 在序列a中查找元素2的插入位置(左侧)
    print(bisect.bisect_left(a, 2))  # 输出: 1

    # 在序列a中查找元素7的插入位置(右侧)
    print(bisect.bisect_right(a, 7))  # 输出: 6

    # 在序列a中插入元素7
    bisect.insort_right(a, 7)
    print(a)  # 输出: [1, 3, 4, 5, 6, 7, 8, 9]

关于 if __name__ == ‘main’:

在Python中,每个模块都有一个__name__属性。如果一个模块是被直接执行的,那么它的__name__属性的值为"main";如果一个模块是被其他模块导入的,那么它的__name__属性的值为模块的名称。因此,当我们编写一个Python程序时,我们可以使用if name == 'main’来判断这个程序是被直接执行还是被其他模块导入。

具体来说,我们可以在Python程序的最后加上以下代码:

    if __name__ == '__main__':
        # 在这里写程序的主逻辑

这段代码的含义是:如果这个程序是被直接执行的,那么就执行if语句中的代码;如果这个程序是被其他模块导入的,那么if语句中的代码不会被执行。这样做的好处是,我们可以在程序中编写一些测试代码,这些代码只有在这个程序被直接执行的时候才会被执行,而在被其他模块导入的时候不会执行。

例如,下面的代码演示了如何使用if __name__ == 'main’来编写一个简单的Python程序:

    def fibonacci(n):
        if n <= 1:
            return n
        else:
            return fibonacci(n-1) + fibonacci(n-2)

    if __name__ == '__main__':
        for i in range(10):
            print(fibonacci(i))


这个程序定义了一个递归函数fibonacci,然后使用if __name__ == 'main’来测试这个函数的正确性。如果这个程序是被直接执行的,那么它会打印出斐波那契数列的前10项;如果这个程序是被其他模块导入的,那么它不会打印任何东西。

快速建立一个web服务

我们可以使用Python内置的http.server模块来快速地建立一个简单的web服务。具体来说,我们可以在一个文件夹中运行以下命令来启动这个服务:

python -m http.server

这个命令会在8000端口上启动一个简单的web服务,然后将当前文件夹中的所有文件都作为静态文件提供出来。例如,如果我们在当前文件夹中有一个名为index.html的文件,那么我们可以通过访问http://localhost:8000/index.html来在浏览器中查看这个文件。

需要注意的是,这个web服务是非常简单的,只能提供静态文件,而不能提供动态内容。如果我们需要提供动态内容,那么就需要使用更加复杂的web框架,例如Django或Flask。

如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

1️⃣零基础入门

① 学习路线

对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述

Python兼职渠道推荐

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

2️⃣国内外Python书籍、文档

① 文档和书籍资料

在这里插入图片描述

3️⃣Python工具包+项目源码合集

①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

4️⃣Python面试题

我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【嵌入式学习收徒,高薪offer等你来!!!】

有粉丝问了一个问题&#xff0c;说他今年要毕业了&#xff0c;投了好多简历都石沉大海&#xff0c;感觉好多公司都不招人了&#xff0c;想问一下现在究竟是不是如此&#xff0c;不清楚我当年毕业的时候是怎么样的。 我先不直接回答这个问题&#xff0c;先来看一组数据&#xf…

Day 1.数据结构----单向链表(无头单向链表)

数据结构 如何组织存储数据 程序 数据结构 算法 MVC&#xff1a;软件设计结构 M&#xff1a;数据的管理&#xff08;数据结构&#xff09; V&#xff1a;视图&#xff0c;数据的反映及人机交互 C&#xff1a;逻辑控制 单向链表 有头链表&#xff1a;第一个链表结点中…

山景BP1048 升级狗烧写

1.打开MVAssistant_BP10xx工具&#xff0c;在芯片型号栏中选择B1X系列。 2.模式选择 选 M2.仅升级Flash SH(可选) 3 .Code数据选择SDK编译好的bin文件 4.const数据选择编译好的提示音bin文件。 5.点击升级狗下载。 6. 如下图所示&#xff0c;出现提示为正在给升级狗正在下载程…

Machine Learning ---- Feature Scaling

目录 一、What is feature scaling:&#xff1a; 二、Why do we need to perform feature scaling? 三、How to perform feature scaling: 1、Normalization: 2、Mean normalization: 3、Standardization (data needs to follow a normal distribution): 一、What is featur…

salesforce生产环境如何删除触发器

由于生产环境不能直接删除触发器&#xff0c;所以需要在sandbox中先让触发器inactive再部署到生产环境&#xff0c;就可以让触发器失效了。

人物百度百科如何创建?人物类词条编辑指南

创建人物百度百科是一项既具有挑战性的工作。下面&#xff0c;伯乐网络传媒就来给大家详细介绍如何创建人物百度百科&#xff0c;包括准备工作、创建步骤以及常见问题解答。 一、创建人物百度百科的准备工作 1. 人物百科词条创建要求 百度百科对创建人物词条有一定的要求&…

谷歌google adsense广告申请提示:网站已下线或无法访问

自己在运营网站时&#xff0c;想在网站上挂google adsense广告&#xff0c;但是申请很多次&#xff0c;收到的邮件都是您需要先纠正一些问&#xff0c;登陆google adsense后台显示&#xff0c;网站已下线或无法访问。 重新申请多次问题依旧&#xff0c;我在想为什么国外无法访…

Python命名空间和作用域,让你的代码逻辑更清晰!

关于Python&#xff0c;我们前面的基础部分&#xff0c;基本也说完了&#xff0c;包括我们也讲了高阶特性&#xff0c;面向对象编程。现在我来补充一个知识&#xff1a;命名空间和作用域。 这是Python两个重要的概念&#xff0c;它们决定了变量的可见性和访问范围。理解命名空…

2023新版mapinfo美化电子地图 新版2013Arcgis shp电子地图 下载

2023新版MapInfo和电子地图美化&#xff0c;以及2013版ArcGIS的SHP电子地图设计&#xff0c;是地理信息系统&#xff08;GIS&#xff09;领域中的两个重要话题。下面将分别对这两个主题进行描述。 样图&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1WB4AGsycyBGagVq5…

React Hooks全部总结

Hooks 概念理解 学习目标&#xff1a; 理解 Hooks 的概念及解决的问题 什么是 hooks hooks 的本质&#xff1a; 一套能够使函数组件更强大、更灵活的&#xff08;钩子&#xff09; React 体系里组件分为类组件和函数组件 多年使用发现&#xff0c;函数组件是一个更加匹配 Rea…

百度百科词条创作技巧分享,提高创建成功率

我们在百度引擎上搜索一些品牌&#xff0c;很快就能看到品牌的百科内容。我们也可以通过百科快速了解品牌的方方面面&#xff0c;也可以相信品牌有很强的实力。从这几点来看&#xff0c;朋友们可以知道百科词条的重要性&#xff0c;我们可以在以下时间继续了解相关的事情。 1、…

【OceanBase诊断调优】—— 敏捷诊断工具obdiag一键分析OB集群日志设计与实践

最近总结一些诊断OCeanBase的一些经验&#xff0c;出一个【OceanBase诊断调优】专题&#xff0c;也欢迎大家贡献自己的诊断OceanBase的方法。 1. 前言 obdiag定位为OceanBase敏捷诊断工具。1.2版本的obdiag支持诊断信息的一键收集&#xff0c;光有收集信息的能力&#xff0c;…

蓝桥杯单片机快速开发笔记——PCF8591电压信号探测器(可调电阻Rb2电压)和采样光敏电阻

一、原理图 此处考点分析&#xff1a;可能会在引用iic文件时需要自己在头文件定义SCL/SDA sbit sda P2^1; sbit scl P2^0; 二、思维导图 三、代码示例 #include "iic.h" #include "smg.h"unsigned int adc1_value 0; //AIN1的采样数据 float adc…

2024,这些优质可视化大屏素材,承包你一整年的可视化项目

可视化设计一直以来是个难题。如果不知道方法论、没有相关资源&#xff0c;那即使熬了几个大夜&#xff0c;掉了一地头发&#xff0c;设计出来了的东西也只会落个遭人嫌弃的下场。 所以&#xff0c;为了帮助大家提高可视化开发效率&#xff0c;快速制作出美观的可视化效果&…

luceda ipkiss教程 63:器件端口延伸ExtendPorts

案例分享&#xff1a;通过picazzo3库中的ExtendPorts函数实现器件的端口延伸 如&#xff1a; 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3 from picazzo3.container.extend_ports import ExtendPorts# Building the MMI PCell wi…

C语言例:整型常量025,求解十进制和十六进制

1. 八进制数的每一位乘以对应的权值&#xff08;8的幂&#xff09;&#xff0c;然后将结果相加&#xff0c;得到十进制数。 025 21 2.八进制先转二进制&#xff08;一变三&#xff09;&#xff0c;再二进制转十六进制&#xff08;四合一&#xff09; 025 0001 0101 0…

Unity类银河恶魔城学习记录11-1 p103 Item源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili ItemData.cs using System.Collections; using System.Collections.Generi…

vue3+ts动态表单渲染,antd的useForm改造

let fieldList: any getFormFields(fieldInfo.coreNavigationList[0].list[0].list,fieldInfo.positionCodeRespVO,isCanBeUpdateProcess.value,isDetail.value 1); fieldInfo数据格式&#xff1a; {"name": "默认模板","status": "ENA…

03、判断和循环

三、判断与循环 文章目录 三、判断与循环顺序结构分支结构If语句在程序中就是用来判断的switch 循环结构forwhiledo while 顺序结构 顺序结构是Java程序默认的执行流程&#xff0c;按照代码的先后顺序&#xff0c;从上到下依次执行。 分支结构 If语句在程序中就是用来判断的 …

opc客户端

支持opc&#xff0c;da&#xff0c;ua通信&#xff08;匿名登陆及用户登陆&#xff09; 支持批量节点数据监听&#xff0c;当数据有变化时更新 支持单个节点读取和写入 KeepServer做为modbus server keepserver通信配置 https://blog.csdn.net/xiaochenXIHUA/article/detail…