为了账号安全,请及时绑定邮箱和手机立即绑定

Python 是否真的如传说中的优雅

标签:
Python
Python 是否真的如传说中的优雅

Python 号称“最优雅的语言”,近年来的热度超过了“世界上最好的语言” PHP,于是简单学习了一下。发现 Python 有的语法确实很爽,比如切片。但同时觉得,有些语法对于之前主要使用 PHP 和 JavaScript 的新手来说,可能会稍感水土不服。简要列举一些比较特别的示例,分享给大家。

奇怪的语法

  1. r'' 表示''内部的字符串不转义

    print(r'I\'m \"OK\"!')
    print('I\'m \"OK\"!')
  2. '''内容''' 表示多行内容

    print('''line1
    line2
    line3''')
  3. 要注意的运算符

    python 中不存在 &&、||、=== 运算符,用以下运算符代替:

    and
    or
    is

    python 中用 // 表示相除‘舍一取整’

    14 // 3
    14 / 3

    python 中用 ** 表示幂赋值运算

    2 ** 3
  4. 内容含有中文,需要最开始一行声明 UTF-8 读取

    # -*- coding: utf-8 -*-
  5. 字符串格式化输出

    'Hi, %s, you have $%d.' % ('Lucy', 100)
    '[%5d - %05d]' % (3, 1)
    '%.2f' % 3.1415926
    'growth rate: %d %%' % 7
  6. 规定定义只有一个元素的元组时,要加,消除歧义

    t1 = (1,)
    t2 = (1)
  7. 数据类型检查

    isinstance('3.14', (int, float))
  8. 默认参数不能是可变对象(list、dict)

    def add_end(L=[]):
        L.append('END')
        return L
    
    add_end()
    add_end()
  9. 可变参数(args 接收的是一个 tuple)

    def calc(*args):
        sum = 0
        for n in args:
            sum = sum + n * n
        return sum
    
    calc(1, 2)
    calc(1, 2, 3, 4, 5)
  10. 关键字参数(kw 接收的是一个 dict)

    def person(name, **kw):
        print('name:', name, 'other:', kw)
    
    person('Lucy')
    person('Lucy', age=23, weight='70kg')
  11. 切片

    # -*- coding: utf-8 -*-
    L = [i for i in range(100)]
    
    # 索引从 0 开始, 到 10 结束, 步长为 1
    print(L[:10]) // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    
    # 从索引 10 开始, 步长为 1
    print(L[10:]) // [10 ,11, 12, 13, ... , 99]
    
    # 最后 10 个元素,  步长为 1
    print(L[-10:]) // [90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
    
    # 从索引 2 开始, 步长为 3
    print(L[2::3]) // [2, 5, 8, 11, ... , 98]
    
    # 索引从 4 开始, 到 50 结束, 步长为 5
    print(L[4:50:5]) // [4, 9, 14, 19, 24, 29, 34, 39, 44, 49]
    
    # 索引从 4 开始, 步长为 10
    print(L[4::10]) // [4, 14, 24, 34, 44, 54, 64, 74, 84, 94]
    
    # 索引从 4 开始, 步长为 10, 取前 3 个元素
    print(L[4::10][:3]) // [4, 14, 24]
    
    # 索引从 4 开始, 步长为 10, 从第 3 个元素往后取
    print(L[4::10][3:]) // [34, 44, 54, 64, 74, 84, 94]
    
    # 索引从 4 开始, 步长为 10, 取最后 3 个元素
    print(L[4::10][-3:]) // [74, 84, 94]
    
    # 索引从 4 开始, 步长为 10, 截掉最后 3 个元素
    print(L[4::10][:-3]) // [4, 14, 24, 34, 44, 54, 64]
    
    # 列表倒序
    print(L[::-1])
    
    # 列表倒序, 从倒数索引 3 开始, 取到末尾
    print(L[3::-1]) // [3, 2, 1, 0]
    
    # 首字母大写
    def firstCharUpper(s):
    return s[:1].upper() + s[1:]
    
    print(firstCharUpper('hello'))
    print(firstCharUpper('sunday'))
    print(firstCharUpper('september'))
  12. 生成列表

    [x * x for x in range(1, 11) if x % 2 == 0]
  13. 斐波拉契数列(Fibonacci)

    def fib(max):
    n, a, b = 0, 0, 1
    while n < max:
        print(b)
        a, b = b, a + b
        n = n + 1
    return 'done'
  14. 装饰器

    import functools
    
    def log(func):
        @functools.wraps(func)
        def wrapper(*args, **kw):
            print('call %s():' % func.__name__)
            return func(*args, **kw)
    return wrapper
  15. 匿名函数

    list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
  16. 偏函数

    import functools
    int2 = functools.partial(int, base=2)
    int2('1000000')
    int2('1010101')
  17. 遍历取得索引(需要额外使用 enumerate 函数)

    L = ['Adam', 'Lisa', 'Bart', 'Paul']
    for index, name in enumerate(L):
        print(index, '-', name)
  18. 列表生成式 -- 实现找出对称的三位数,例如 121

    L1 = [x for x in range(100, 1000) if str(x)[0] == str(x)[-1]]
    
    L2 = [(100 * m) + (10 * n) + m for m in range(1, 10) for n in range (0, 10)]
  19. 装饰器 【优雅】

    def log(f):
        def fn(*args, **kw):
            print('call ' + f.__name__ + '()...')
            return f(*args, **kw)
        return fn
    
    @log
    def add(x, y):
        return x + y
    
    print(add(1, 2))
  20. 斐波那契数列(0, 1, 1, 2, 3, 5, 8 ...)

    class Fib(object):
        def __init__(self, num):
            a, b, L = 0, 1, []
            for n in range(num):
                L.append(a)
                a, b = b, a + b
            self.numbers = L
        def __str__(self):
            return str(self.numbers)
        __repr__ = __str__
        def __len__(self):
            return len(self.numbers)
    
    f = Fib(10)
    print(f)
    print(len(f))

    Tips: 大家感觉以上语法/实现,哪些优雅?哪些古怪?

点击查看更多内容
6人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消