10个 Python 高效编程小技巧

news2024/12/28 5:41:02

初识Python语言,觉得python满足了你上学时候对编程语言的所有要求。python语言的高效编程技巧让那些曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了。高级语言,如果做不到这样,还扯啥高级呢?

01 交换变量

>>>a=3

>>>b=6
复制代码

这个情况如果要交换变量在c++中,肯定需要一个空变量。但是python不需要,只需一行,大家看清楚了

>>>a,b=b,a

>>>print(a)>>>6

>>>ptint(b)>>>5
复制代码

02 字典推导(Dictionary comprehensions)和集合推导(Set comprehensions)

大多数的Python程序员都知道且使用过列表推导(list comprehensions)。如果你对list comprehensions概念不是很熟悉——一个list comprehension就是一个更简短、简洁的创建一个list的方法。

>>> some_list = [1, 2, 3, 4, 5]

>>> another_list = [ x + 1 for x in some_list ]

>>> another_list
[2, 3, 4, 5, 6]
复制代码

自从python 3.1 起,我们可以用同样的语法来创建集合和字典表:

>>> # Set Comprehensions
>>> some_list = [1, 2, 3, 4, 5, 2, 5, 1, 4, 8]

>>> even_set = { x for x in some_list if x % 2 == 0 }

>>> even_set
set([8, 2, 4])

>>> # Dict Comprehensions

>>> d = { x: x % 2 == 0 for x in range(1, 11) }

>>> d
{1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False, 10: True}
复制代码

在第一个例子里,我们以some_list为基础,创建了一个具有不重复元素的集合,而且集合里只包含偶数。而在字典表的例子里,我们创建了一个key是不重复的1到10之间的整数,value是布尔型,用来指示key是否是偶数。这里另外一个值得注意的事情是集合的字面量表示法。我们可以简单的用这种方法创建一个集合:

>>> my_set = {1, 2, 1, 2, 3, 4}

>>> my_set
set([1, 2, 3, 4])
复制代码

而不需要使用内置函数set()。

03 计数时使用Counter计数对象

这听起来显而易见,但经常被人忘记。对于大多数程序员来说,数一个东西是一项很常见的任务,而且在大多数情况下并不是很有挑战性的事情——这里有几种方法能更简单的完成这种任务。

Python的collections类库里有个内置的dict类的子类,是专门来干这种事情的:

>>> from collections import Counter
>>> c = Counter( hello world )

>>> c
Counter({ l : 3,  o : 2,    : 1,  e : 1,  d : 1,  h : 1,  r : 1,  w : 1})

>>> c.most_common(2)
[( l , 3), ( o , 2)]
复制代码

04 漂亮的打印出JSON

JSON是一种非常好的数据序列化的形式,被如今的各种API和web service大量的使用。使用python内置的json处理,可以使JSON串具有一定的可读性,但当遇到大型数据时,它表现成一个很长的、连续的一行时,人的肉眼就很难观看了。

为了能让JSON数据表现的更友好,我们可以使用indent参数来输出漂亮的JSON。当在控制台交互式编程或做日志时,这尤其有用:

>>> import json

>>> print(json.dumps(data))  # No indention
{"status": "OK", "count": 2, "results": [{"age": 27, "name": "Oz", "lactose_intolerant": true}, {"age": 29, "name": "Joe", "lactose_intolerant": false}]}

>>> print(json.dumps(data, indent=2))  # With indention

{
  "status": "OK",
  "count": 2,
  "results": [

    {
      "age": 27,
      "name": "Oz",

      "lactose_intolerant": true
    },
    {
      "age": 29,

      "name": "Joe",
      "lactose_intolerant": false
    }
  ]

}
复制代码

同样,使用内置的pprint模块,也可以让其它任何东西打印输出的更漂亮。

05 解决FizzBuzz

前段时间Jeff Atwood 推广了一个简单的编程练习叫FizzBuzz,问题引用如下:

写一个程序,打印数字1到100,3的倍数打印“Fizz”来替换这个数,5的倍数打印“Buzz”,对于既是3的倍数又是5的倍数的数字打印“FizzBuzz”。

这里就是一个简短的,有意思的方法解决这个问题:

for x in range(1,101):
    print"fizz"[x%3*len( fizz )::]+"buzz"[x%5*len( buzz )::] or x
    
06 if 语句在行内

print "Hello" if True else "World"
>>> Hello
复制代码

07 连接

下面的最后一种方式在绑定两个不同类型的对象时显得很cool。

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
print nfc + afc
>>> [ Packers ,  49ers ,  Ravens ,  Patriots ]

print str(1) + " world"
>>> 1 world

print `1` + " world"
>>> 1 world

print 1, "world"
>>> 1 world
print nfc, 1
>>> [ Packers ,  49ers ] 1
复制代码

08 数值比较

这是我见过诸多语言中很少有的如此棒的简便法

x = 2
if 3 > x > 1:
   print x
>>> 2
if 1 < x > 0:
   print x
>>> 2
复制代码

09 同时迭代两个列表

nfc = ["Packers", "49ers"]
afc = ["Ravens", "Patriots"]
for teama, teamb in zip(nfc, afc):
     print teama + " vs. " + teamb
>>> Packers vs. Ravens
>>> 49ers vs. Patriots
复制代码

10 带索引的列表迭代

teams = ["Packers", "49ers", "Ravens", "Patriots"]
for index, team in enumerate(teams):
    print index, team
>>> 0 Packers
>>> 1 49ers
>>> 2 Ravens
>>> 3 Patriots

 

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

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

相关文章

【密码学】HMAC与HS256算法

哈希算法加盐 传统的哈希算法&#xff1a; digest hash(input)因为相同的输入会产生相同的输出&#xff0c;所以想要加盐&#xff0c;加盐的目的就在于&#xff0c;使输入有所变化&#xff1a; digest hash(salt input)这个salt可以看作是一个额外的“认证码”&#xff0…

ChatGPT 使用 API 进行 Postman 调用测试

当获得 ChatGPT 的 API Key 以后&#xff0c;想使用 Postman 来进行一下调用。调用的方法为 POST。需要设置几个参数。我们希望使用的 EndPoint 是&#xff1a;API EndPoint访问使用的 EndPoint 是&#xff1a;https://api.openai.com/v1/completions授权方法授权的方法使用的是…

FortiGate FGCP HA 配置文档

概述 FortiOS 提供 6 种冗余解决方案&#xff0c;工业标准的 VRRP 和 5 种专有的解决方案&#xff1a; FortiGate Cluster Protocol (FGCP) high availability&#xff0c;FortiGate Session Life Support Protocol (FGSP) high availability&#xff0c;Session-Aware Load …

Spring Cloud LoadBalancer(负载均衡)

简介 了解过Spring Cloud&#xff0c;就知道&#xff0c;之前Spring Cloud中默认的负载均衡组件为ribbon&#xff0c;ribbon是Netflix开源的组件&#xff0c;但是目前已经停止更新了。所以Spring官方推出了Spring Cloud LoadBalancer。而且Spring Cloud LoadBalancer是目前唯一…

win11下通过qemu 安装win10 arm系统

安装qemu QEMU for Windows – Installers (64 bit) 我选了最新的20221230的版本&#xff0c;我将其安装在c:\qemu7\下&#xff0c;另外在环境变量中加入这个路径 然后在别的盘上建立一个路径&#xff0c;名称随意&#xff0c;不要有中文和空格即可&#xff0c;我放在了e:\qe…

电脑蓝屏提示错误代码0X000000B4怎么办?

电脑蓝屏可以说是Windows的一个常见问题了。蓝屏状况数不胜数&#xff0c;关键还得看是何终止代码。 如果电脑蓝屏&#xff0c;提示错误代码0X000000B4是什么意思&#xff1f;这是由于Windows不能启动显卡驱动&#xff0c;从而无法进入图形界面。 蓝屏错误0X000000B4可能由驱…

docker搭建redis集群(Cluster版三主三从)

docker搭建redis集群(Cluster版三主三从编写脚步建立配置redis的配置文件启动六个redis服务创建cluster集群测试集群的高可用编写脚步建立配置redis的配置文件 建立配置文件脚本 vim redis.shfor port in $(seq 1 6); \ do \ mkdir -p /volumn/redis/node-${port}/conf touch…

怎么修复老照片?这三个修复方法让你轻松学会

大家在翻看以前的照片时&#xff0c;有没有发现有一些照片的颜色泛黄&#xff0c;内容也变得有些模糊不清了&#xff0c;遇到这种情况应该怎么办呢&#xff1f;不知道的小伙伴也不要着急&#xff0c;今天我就给大家分享几个模糊老照片修复教程&#xff0c;教会大家如何修复老照…

一直没明白的 HTTPS,今天必须让你懂了~

大家第一次接触 HTTPS 协议的时候是不是和我一样&#xff0c;非常困惑。 这玩意概念又多又繁琐。尤其是里面的公钥私钥啥的。 当时就特别想知道&#xff0c;为什么用公钥加密却不能用公钥解密&#xff1f; 看完这篇文章你会弄明白&#xff0c;同时还会解锁很多HTTPS里的细节…

1.所有被new出来的实例都是存放在堆里的吗?Android面经

问题&#xff1a; 所有被new出来的实例都是存放在堆里的吗&#xff1f; 相关知识点&#xff1a; 堆和栈、标量替换、栈上分配、逃逸分析 思考&#xff1a; 首先&#xff0c;这样问了&#xff0c;答案肯定是不是所有new出来的实例都存放在堆里&#xff0c;不然下面没法继续问了…

MODBUS转PROFINET网关在冷水机项目中应用

在电镀行业中&#xff0c;需要频繁用到冷水机&#xff0c;电镀产品在焊接过程中会产生大量的热量&#xff0c;这些热量若不及时散除&#xff0c;则有可能会导致待加工的电镀产品发生大变形&#xff0c;本案例的目的是通过微硬创新MODBUSRTU转PROFINET网关连接冷水机和PLC&#…

安卓玩机搞机技巧综合资源-----修复基带 改串码 基带qcn 改相关参数 终结贴

有需要了解这方面常识的友友梦可以先参阅我这几个帖子 请点击跳转 基带qcn的备份与写入相关 格机 nv报错 高通联机修改IMEI等参数的相关解析 关于高通QPST平台功能和选项的一些简单说明 基带qcn的备份与写入相关 格机 nv报错 以上几个帖子可以初步了解基带 串码等参数方面…

面试官:如何用Excel进行预测分析?这操作绝了!

【面试题】一个社交APP, 它的新增用户次日留存、7日留存、30日留存分别是52%、25%、14%。请模拟出来&#xff0c;每天如果日新增6万用户&#xff0c;那么第30天&#xff0c;它的日活数会达到多少&#xff1f;请使用Excel进行分析。【分析思路】第1日(次日)留存用户数第1日新增用…

筛选用户权限子集记录

【问题】Is there a way to use the $map operator in a regular Mongo document query (or aggregate \$match which I believe is the same thing).What I’m trying to do is thus: Given an set of sets, return the document if any of the sets is a subset of a paramet…

SpringBoot+VUE前后端分离项目学习笔记 - 【12 Vue使用路由】

整体代码结构 Manage.vue HomeView.vue改名为Manage.vue,用以管理其他view页面【通过import 】 <template><el-container style"min-height: 100vh"><el-aside :width"sideWidth px" style"box-shadow: 2px 0 6px rgb(0 21 41 / 3…

年终盘点:元宇宙产业委多项成果荣登元宇宙行业影响力榜单

在经过了2021年元宇宙概念落地和普及后&#xff0c;2022年成为元宇宙相关产业井喷式发展的一年。元宇宙产业委在2022年多项成果荣登行业影响力榜单。 2021-2022元宇宙科技传播图书影响力榜发布&#xff0c;元宇宙产业委好书上榜 2022年9月&#xff0c;两办印发《关于新时代进一…

Internet Download Manager2023最新永久版下载及功能介绍

提到下载工具&#xff0c;大多数国人映入脑海的或许是迅雷。没错&#xff0c;当今随着互联网的迅猛发展&#xff0c;不少早期积累大量用户的国内外下载工具尽显疲态&#xff0c;止步不前&#xff0c;纷纷掉队&#xff0c;如网络快车、FDM、脱兔等等。一款名叫Internet Download…

Anaconda(python)安装教程以及创建新环境

文章目录一. Anaconda简介二. Anacoda安装1. Anacondad下载2. 安装方式三.通过conda创建新的环境四.conda常用命令一. Anaconda简介 Anaconda介绍&#xff1a;开源的Python发行版本。Anaconda指的是一个开源的Python发行版本&#xff0c;其包含了conda、Python等180多个科学包…

make_shared与new

假设有这么个类&#xff1a; class A {private:int b;public:A(int c):b(c) { cout << "call constructor..." << endl;}~A() { cout << "call destructor..." << endl;}int getValue() { return b;} }; 当创建指向 A 对象的智能…

【测绘程序设计】——附合导线近似平差

附合导线(Connecting Traverse,CT)近似平差是测绘专业九大核心专业基础课——《数字地形测量学》中的重点内容,其程序设计也是测绘学子必修的课程设计之一。本文分享了测绘程序设计——附合导线近似平差(C++/MFC版),相关源代码(完整工程,包含测试数据)及使用示例(结果…