博客
关于我
Python编程中一定要注意的那些“坑”(一)
阅读量:271 次
发布时间:2019-03-01

本文共 1805 字,大约阅读时间需要 6 分钟。

Python编程实战指南

1. 运算符的误解

在Python中,逗号不是运算符,而是用于分隔符的常见用法。

>>> x = 3, 5>>> x(3, 5)>>> x == 3, 5(False, 5)>>> 1, 2, 3(1, 2, 3)>>> 3 in [1, 2, 3], 5(True, 5)

2. ++ 和 -- 的误用

++ 和 -- 在Python中不是有效的运算符,尽管在某些编程语言中可能有此用法。

>>> x = 3>>> x +++ 58>>> x++  File "
", line 1 SyntaxError: invalid syntax>>> ++55>>> ++++++++55>>> --55

3. Lambda 表达式中的变量作用域

在 lambda 表达式中,变量的作用域容易引起混淆。

>>> d = {}>>> for i in range(5):...     d[i] = lambda: i**2...>>> d[2]()16>>> d[3]()16

这里的问题在于,lambda 表达式中的变量 i 是在调用时决定的,而不是在定义时固定的。

>>> i = 10>>> d[0]()100>>> d = {}>>> for i in range(5):...     d[i] = lambda x=i: x**2...>>> d[2]()4>>> d[3]()9

通过将 x 赋值为 i,可以确保 lambda 函数在调用时使用正确的值。

4. 局部变量的判断

在一个作用域中,只要有变量被赋值,且该变量在当前作用域内没有被声明,则它就是局部变量。

>>> x = 10>>> def demo():...     print(x)...>>> demo()10>>> def demo():...     print(x)...     x = 3...     print(x)...>>> demo()Traceback (most recent call last):  File "
", line 1, in
File "
", line 2, in demoUnboundLocalError: local variable 'x' referenced before assignment

在第二个示例中,x 被重新赋值,因此它被视为局部变量。

5. 元组的可变性

元组是不可变的对象,意味着其元素无法被修改。

>>> x = (1, 2, 3)>>> x[0] = 4Traceback (most recent call last):  File "
", line 1, in
TypeError: 'tuple' object does not support item assignment

如果需要修改元组中的元素,可以将其转换为列表进行操作。

>>> x = [1, 2]>>> x = (x, 3)>>> x[0].append(4)>>> x([1, 2, 3, 4], 3)

需要注意的是,列表和元组是不同的对象类型。

>>> y = x[0]>>> y += [5]>>> x([1, 2, 3, 4, 5], 3)>>> y[1, 2, 3, 4, 5, 6]

y 被重新赋值时,x[0]y 不再共享同一个对象。

6. 字符串转换方法

字符串可以通过多种方式转换为数字。

>>> eval('9.9')9.9>>> eval("'09.9'")9.9>>> float('9.9')9.9>>> float("'09.9'")9.9>>> int('9')9>>> int("'09'")9

需要注意的是,使用 eval() 转换整数时,前导零会导致语法错误。

>>> eval("'09'")Traceback (most recent call last):  File "
", line 1, in
File "
", line 1 09SyntaxError: invalid token

转载地址:http://ooyx.baihongyu.com/

你可能感兴趣的文章
Objective-C实现round robin循环赛算法(附完整源码)
查看>>
Objective-C实现RRT路径搜索(附完整源码)
查看>>
Objective-C实现rsa 密钥生成器算法(附完整源码)
查看>>
Objective-C实现RSA密码算法(附完整源码)
查看>>
Objective-C实现RSA素因子算法(附完整源码)
查看>>
Objective-C实现runge kutta龙格-库塔法算法(附完整源码)
查看>>
Objective-C实现segment tree段树算法(附完整源码)
查看>>
Objective-C实现selection sort选择排序算法(附完整源码)
查看>>
Objective-C实现sha256算法(附完整源码)
查看>>
Objective-C实现shell sort希尔排序算法(附完整源码)
查看>>
Objective-C实现sieve of Eratosthenes埃拉托色尼筛法算法(附完整源码)
查看>>
Objective-C实现sieveOfEratosthenes埃拉托色尼筛法求素数算法 (附完整源码)
查看>>
Objective-C实现similarity search相似性搜索算法(附完整源码)
查看>>
Objective-C实现SinglyLinkedList单链表算法(附完整源码)
查看>>
Objective-C实现SizeBalancedTree大小平衡树(附完整源码)
查看>>
Objective-C实现skew heap倾斜堆算法(附完整源码)
查看>>
Objective-C实现Skip List跳表算法(附完整源码)
查看>>
Objective-C实现slack message松弛消息算法(附完整源码)
查看>>
Objective-C实现slow sort慢排序算法(附完整源码)
查看>>
Objective-C实现tanh函数功能(附完整源码)
查看>>