代碼又長又複雜?總結Python一行代碼就能幹的事兒,不能更簡單了

Python语言因为独特的设计思想比起其他语言来说在表现力上有很大的优势。

今天我们通过几个一行Python代码的例子来验证Python的强大表现能力。

通过对这些例子的解读,我们可以更好的学习和了解Python语言。


一行代码对字符串倒序排列

切片的参数格式: [start_index: stop_index: step]

如果不填写切片起止位置参数,那么默认是取字符串全部内容,当step参数(步长)为负数时,字符串会自动从右往左取值,-1是依次挨个取值,所以可以得到一个倒序的字符串。

<code>print('我爱你'[::-1])/<code>
代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了


一行代码输出当前农历年份

<code>print('猴鸡狗猪鼠牛虎兔龙蛇马羊'[2020%12])/<code>
代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了

将12生肖按固定顺序排好形成一个字符串,再用切片的方法获取其中一个值,对当前年份数字进行12取模得到的数字就是12生肖字符串的元素下标地址。


一行代码打印9*9乘法表

一行输出9*9 乘法表只是把原本应该写两个for循环的代码做了一下精简压缩。

<code>print('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))/<code>


代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了

来看看完整版的代码:

<code>for x in range(1, 10):
    for y in range(1,x+1):
        print('%s*%s=%-2s\t' % (y,x,x*y), end='')
    print()/<code>


一行命令启动一个HTTP Server

<code>python -m http.server 8080/<code>


代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了

该命令可以在控制台运行,它会在把控制台当前目录下的文件和目录映射出来作为可访问资源。通常可以用于把自己电脑上的文件内容共享出来给别人访问。


代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了


一行代码交换两个变量的值

如果学过C语言的朋友看到下面这种交换变量的方式会觉得很奇葩。

<code>a, b = b, a/<code>

因为Python的变量并不直接存储值,而只是引用了一个内存地址,所以在交换变量时,只是交换了引用的地址。


参照以下代码:

<code>import dis

def func(a,b):
    a,b = b,a
    print(a,b)
    
a=1
b=2
func(a,b)
dis.dis(func)/<code>

dis模块用于分析Pyhton字节码。

以下结果我们可以根据输出的结果观察Python代码在编译器中的执行过程。


代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了


一行代码打印迷宫

<code>print(''.join(__import__('random').choice('/\\') for i in range(60*30)))/<code>


代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了

这行代码首先通过 __import__内部函数引用了 random库,用于在Python中产生随机数,通过random.choice()方法来选择随机数,表示每次从备选字符串里选择随机选择一个字符串。

然后构造了一个迭代对象,产生了60*30次循环,并将每一次循环产生的字符串放入生成器里。

最后通过字符串的join方法对生成器进行作用,得到完整的1800个字符信息,用join的好处在于效率高。

因为Python的字符串是不可变对象,也就意味着如果每次我们对其进行拼接都会产生一个新的对象,这样会产生1800次对象,效率比较低。通过join方法就不会出现这样的问题了,一次搞定。


一行代码输出文件内容

<code>print(''.join([line for line in open('test.go')]))/<code>


代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了

这行代码其实看起来也很简单,通过open()函数打开一个 "test.go"的代码文件会隐性的得到一个文件对象,然后对这个文件对象进行迭代求值,将每一行对内容放到line变量里,形成一个列表推导。

最后用join拼接起所有行的信息,输出出来就是整个文件内容了。


一行代码输出评星

<code>print("★★★★★☆☆☆☆☆"[5-3:10-3])/<code>
代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了

假设预定星级是3星,我们可以巧妙的通过Python字符串切片的方式来实现效果。

将满星5颗和空星5颗拼在一起,然后通过切片的起止位置来截取内容,完美实现效果。


一行代码进行逻辑判断

在其他语言里有所谓的三目运算符来达到一行代码进行逻辑判断的效果。

<code>b =  a > 1? "执行表达式1":"执行表达式2"/<code>

在Python没有三目运算符,所以通过类似的替代办法来实现。

<code>print(True if len("我是卧龙岗散淡的人") == 10 else False)/<code>
代码又长又复杂?总结Python一行代码就能干的事儿,不能更简单了

欢迎关注我 “纸飞机编程”,获取更多有趣的Python编程信息。


分享到:


相關文章: