美文网首页
Python小技巧

Python小技巧

作者: 一把猫粮 | 来源:发表于2018-07-31 15:57 被阅读0次

    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小技巧

          本文链接:https://www.haomeiwen.com/subject/leqeuftx.html