目录
  • 1. 引言
  • 2. 函数属性
  • 3. for-else循环
  • 4. int型分隔符
  • 5. eval() and exec()
  • 6. 省略号
    • 6.1 占位符
    • 6.2 numpy数组中用于切片
  • 7.总结

    1. 引言

    最近闲暇之余,我会去阅读一些python文档,有时候会注意到一些有趣的python特性,这些特性不禁让人惊呼:“哇,python原来还可以这么写”。

    闲话少说,我们直接开始吧。 :)

    2. 函数属性

    和设置类和对象的属性类似,我们在python中也可以为函数设置属性。样例代码如下:

    def func(x):
        intermediate_var = x**2 + x + 1
        if intermediate_var % 2:
            y = intermediate_var ** 3
        else:
            y = intermediate_var **3 + 1
        # setting attributes here
        func.optional_return = intermediate_var
        func.is_awesome = 'yes, my function is awesome.'
        return y
    y = func(3)
    print('final answer is', y)
    # accessing function attributes
    print('show calculations -->', func.optional_return)
    print('is my function awesome? -->', func.is_awesome)
    

    观察上述代码,我们在第9行设置函数属性‘optional_return’在第10行设置属性’is_awesome’.同时,在最后两行的调用语句里我们访问了这两个函数属性的值。

    上述代码的运行结果如下:

    final answer is 2197
    show calculations –> 13
    is my function awesome? –> yes, my function is awesome.

    当我们希望选择检查一些函数中的中间变量,但不想每次调用函数时使用 return 语句显式返回它时,上述函数属性的写法将会排上用场。

    3. for-else循环

    在 python 中,我们可以在 for 循环中添加 else 语句。只有在执行期间在循环体中没有遇到 break 语句时才会触发 else 语句。样例代码如下:

    my_list = ['some', 'list', 'containing', 'five', 'elements']
    min_len = 3
    for element in my_list:
        if len(element) < min_len:
            print(f'caught an element shorter than {min_len} letters')
            break
    else:
        print(f'all elements at least {min_len} letters long'
    

    上述代码输出如下:

    all elements at least 3 letters long

    观察上述代码,else 在 for 级别缩进,而不是在 if 级别缩进。在这里,没有任何元素的长度小于 3。因此,将永远不会遇到 break 语句。因此,else 子句将被触发(在执行 for 循环之后)并打印上面显示的输出。

    4. int型分隔符

    一般来说,从视觉效果上看人眼很难分辨出数字10000000 和100000000 ,在python中我们不能像英语那样直接使用逗号分隔符来将数字隔开,这是因为python会将逗号分隔开的数字解释为多个整数的元组。

    但是,python也有一种方便的方式来处理这种情形:我们可以使用下划线当做分隔符来提升数字的可读性,此时数字1_000_000将被解释成整形数字并增加了可读性。

    代码样例如下:

    a = 3250
    b = 67_543_423_778
    print(type(a))
    print(type(b))
    print(type(a)==type(b))
    

    运行结果如下:

    <class ‘int’>
    <class ‘int’>
    true

    5. eval() and exec()

    python 具有动态读取字符串并将其视为一段 python 代码的能力。这主要是通过使用 eval() 和 exec() 函数来实现的(“eval”用于评估表达式,“exec”用于执行语句)。

    代码举例如下:

    a = 3
    b = eval('a + 2')
    print('b =', b)
    exec('c = a ** 2')
    print('c is', c)
    

    运行结果如下:

    b = 5
    c is 9

    上述代码中,eval() 函数将输入字符串作为 python 表达式读取,对其求值,并将结果分配给变量“b”。同时,exec() 函数将输入字符串作为 python 语句读取并执行。

    6. 省略号

    省略号或“…”是 python 的内置常量,类似于 none、true、false 等内置常量。它可以以不同的方式使用,包括但不限于:

    6.1 占位符

    和 pass 类似,省略号可以在代码没有写完整的时候用作占位符,举例如下:

    def some_function():
        ...
    def another_function():
        pass
    

    6.2 numpy数组中用于切片

    numpy中使用省略号可以对数组进行切片。以下代码显示了对 numpy 数组进行切片的两种等效方法:

    import numpy as np
    a = np.arange(16).reshape(2,2,2,2)
    print(a[..., 0].flatten())
    print(a[:, :, :, 0].flatten())
    

    结果如下:

    [ 0  2  4  6  8 10 12 14]
    [ 0  2  4  6  8 10 12 14]

    7.总结

    python 不仅是一门有用的语言,而且是一门非常有趣的语言。我们都忙于生活工作,但为了更好地了解语言本身的一些特性并没有什么坏处。在本文中,重点介绍了5个python中隐含的特性,并给出了相关代码的讲解。

     本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注www.887551.com的更多内容!