Python小技巧


01、 a, b = input().split()

  一行接收多个输入值

while 1:
    try:
        a, b = input("请输入,以  分开 : ").split()
        print(a, b)
    except Exception as e:
        print(e)

输入值太多会有问题

请输入,以  分开 : hello world
a = hello, b = world
请输入,以  分开 : i am CatF
too many values to unpack (expected 2)
请输入,以  分开 : lll lll lll lll
too many values to unpack (expected 2)
请输入,以  分开 :

猜想能否有一种接受多个赋值的方法:
尝试:

*a = input("清输入,以  分开 : ").split()
        print(*a)

失败

  File "E:\1coding\自学\lab.py", line 3
    *a = input("清输入,以  分开 : ").split()
    ^
SyntaxError: starred assignment target must be in a list or tuple

google

a, *b = input("请输入,以  分开 : ").split()
        print(a, *b)
请输入,以  分开 : 可以 了吗
可以 了吗
请输入,以  分开 : 两个字 可以  了诶
两个字 可以 了诶
请输入,以  分开 : n i c e j o b !
n i c e j o b !

补充:
如果只需要分割出来的第一个值,后面的忽略,或者是要第一个和最后一个值,可以用以下方式表示,当然,哪个下划线不用下划线也是可以的,比如用args

a, *_ = input("请输入,以  分开 : ").split()
        print(a)
a, *_, c = input("请输入,以  分开 : ").split()
        print(a, c)

02、 locals()[想要得到的变量名]

  动态生成变量名

困扰许久的问题,也没有许久吧,突然想起来就试一试自己的想法,失败就接着手头的事,这次看到js可以动态生成变量,果断google了一下Python的,发现locals()的妙用。

for i in range(5):
        locals()['var' + str(i)] = i
        print('var'+str(i)+'=', locals()['var' + str(i)])

能够动态生成以下变量,并赋值为相对应的 i的值。

var0= 0
var1= 1
var2= 2
var3= 3
var4= 4

解放双手,开拓思想,真是门强大的语言。


03、for _ in range(10)

  生成随机字符串

''.join(str(random.choice(range(10))) for _ in range(9))  
# 生成9次str(...)

04、strip()

 去除开头结尾的某些内容

一直想当然的以为strip()就是简单的用于去除头尾的空格,真正遇到这道题的时候却发现,自己真是一知半解
strip(args)中的参数,实际上是按字符划分的选项
举个例子:

In [9]: string = '123abcder123'

In [11]: string.strip('12')
Out[11]: '3abcder123'

In [12]: string.strip('121')
Out[12]: '3abcder123'

In [13]: string.strip('123')
Out[13]: 'abcder'

可以看出,strip函数从字符串string的首尾开始,移除了包含在参数('1', '2')的字符,直到第一个不在参数中的值停止。

In [13]: string.strip('123')
Out[13]: 'abcder'
# 头尾对 1,2,3进行移除,到第一个不为1、2、3的值停止。

同样,lstrip()rstrip()也是一样的,只不过一个只对左边,一个只对右边进行移除。


5、and_or

  判断与输出

这两天看代码的时候看到一种and,or使用的技巧,看起来很酷。

像这样:
order_sort = time_sort == 'm' and 'id' or '-id'
通过前面判断语句来决定是id-id

下面来详解一下。
利用python的andor的机制

In [18]: 1 and 2
Out[18]: 2

In [33]: 2 and 1
Out[33]: 1

In [31]: 1 or 0
Out[31]: 1

In [32]: 0 or 1
Out[32]: 1

我觉得这机制应该是利用了短路逻辑
and需要判断前后是否都为真,所以当and前面的值为假,则直接输出这个假的值

In [21]: False and 2
Out[21]: False

In [22]: 0 and 1
Out[22]: 0

and前面为真,则输出后面的值

In [26]: 1 and False
Out[26]: False

In [27]: 1 and 0
Out[27]: 0

In [28]: 1 and 2
Out[28]: 2

or 需要判断是否有一个真值,如果or前面为真则直接返回,

In [30]: 1 or 2
Out[30]: 1

In [31]: 1 or 0
Out[31]: 1

为假则返回后面的值

In [34]: 0 or 3
Out[34]: 3

In [35]: 0 or False
Out[35]: False

其实这和x if x < y else y的方式很相似,不过,用x < y and x or y的方式看起来真的很酷。


待续。。。

你可能感兴趣的:(Python小技巧)