大家好,Python文档中有一些不起眼却很强大的功能,下面将介绍一些在Python中很有用的操作。
1.函数属性
可以以类似于为类和对象设置特征的方式为函数设置特征:
def func(x):
intermediate_var = x**2 + x + 1
if intermediate_var % 2:
y = intermediate_var ** 3
else:
y = intermediate_var **3 + 1
# 在这里设置属性
func.optional_return = intermediate_var
func.is_awesome = 'Yes, my function is awesome.'
return y
y = func(3)
print('Final answer is', y)
# 访问函数属性
print('Show calculations -->', func.optional_return)
print('Is my function awesome? -->', func.is_awesome)
在第10行和第11行,分别设置了属性“optional return”和“is awesome”。稍后,在第19行和第20行,我们对这些属性进行了外部调用。代码的输出将是:
Final answer is 219
Show calculations --> 13
Is my function awesome --> Yes, my function is awesome
当不想在每次运行函数时使用返回语句显式地返回一个变量,但仍然想恢复作为中间值传入的变量时,这有很好的作用。此外,属性可以从函数声明内部或外部设置。
2.带else的for循环
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')
要注意的是,else
是插入在for
的层次上而不是if
上,在这个例子中,没有任何元素的长度小于3
。因此,break
语句永远不会被使用,在for
循环完成之后,else
子句将被激活,打印出上面显示的输出。
有人可能会认为,可以通过记住是否在另一个变量中找到了break
语句来实现此操作,此外对于在这之后的读者来说,这可能会使代码更易于理解。获取相同结果的等效方法如下:
my_list = ['some', 'list', 'containing', 'five', 'elements']
min_len = 3
no_break = True
for element in my_list:
if len(element) < min_len:
print(f'Caught an element shorter than {min_len} letters')
no_break = False
break
if no_break:
print(f'All elements at least {min_len} letters long')
3.‘int’类型的分隔符
像10000000
和100000000
这样的整数在视觉上很难区分。在这种情况下,Python会将逗号在此上下文中解释为多个整数的元组,因此无法像英语中那样使用它们。
但是Python有一个非常实用的解决方案:我们可以使用下划线作为分隔符,使代码更具可读性。因此,1_000_000
将被视为单个整数。
a = 3250
b = 67_543_423_778
print(type(a))
print(type(b))
OUTPUT:
<class 'int'>
<class 'int'>
True
4.eval()和exec()
Python可以动态地读取一个字符串,并将其视为一行代码,用于评估表达式和执行语句的eval()
和exec()
函数用于执行此操作。
a = 3
b = eval('a + 2')
print('b =', b)
exec('c = a ** 2')
print('c is',c)
在第3行,eval()
函数将输入字符串读取为Python表达式,对其进行评估,并将结果分配给变量‘b’,第6行的exec()
函数将输入字符串读取为Python语句并执行它。
5.省略号
Ellipse或“...”是Python内置的常量,类似于None、True或False等内置常量。
- 未编写代码的占位符
与pass
一样,当代码未完全编写,但需要语法上的占位符时,省略号可以用作通配符。
def some_function():
...
def another_function():
pass
-
“None”的替代品
如果你想表示一个空的输入或返回值,通常会选择None。然而,在某些情况下,None是期望的输入或函数返回值之一。在这种情况下,省略号充当占位符。
# 计算第n个奇数
def nth_odd(n):
if isinstance(n, int):
return 2 * n - 1
else:
return None
# 计算第n个奇数的原始n
def original_num(m=...):
if m is ...:
print('This function needs some input')
elif m is None:
print( 'Non integer input provided to nth_odd( ) function')
elif isinstance(m, int):
if m % 2:
print(f'{m} is {int((m + 1)/2)3th odd number')
else:
print(f'{m} is not an odd number')
original_num()
a = nth_odd(n='some string')
original_num(a)
b = nth_odd(5)
original_num(b)
original_num(16)
nth_odd()
函数计算第n个奇数,original_num()
函数计算从第n个奇数推导出的原始数字n。
在这里不能使用None
,因为它是original_num()
函数的期望输入之一。它们被用作m参数的默认占位符。代码的输出如下所示:
This function needs some input
Non integer input provided to nth_odd() function
9 is 5th odd number
16 is not an odd number