七爪源码:5 个让初学者感到困惑的 Python 操作

本文总结了一些高度相似的 Python 操作,很容易混淆,尤其适合初学者。

七爪源码:5 个让初学者感到困惑的 Python 操作


Lambda 参数:在定义与运行时有界

  • y 在定义期间有界
func = lambda x, y=y: x + y
  • y 在运行时有界
func = lambda x: x + y

示例:将 y 赋值为 10 并定义函数:

y = 10
func1 = lambda x: x + y
func2 = lambda x, y=y: x + ylist(map(func1, lst))
>>> [11, 12, 13, 14, 15]list(map(func2, lst))
>>> [11, 12, 13, 14, 15]

然后让我们更新 y 的值,运行函数,看看会发生什么。

y = 100
list(map(func1, lst))
>>> [101, 102, 103, 104, 105]list(map(func2, lst))
>>> [11, 12, 13, 14, 15]

显然 func1 中的 y 现在采用新值 100 而 func2 仍在使用 y = 10 ,函数定义后对 y 的任何更新都不会影响它使用的参数。


随机选择有/无替换

  • 替换选择:random.choices(seq, k=1) , k being the size for sample, 1 by default.
import randomrandom.choices(list(range(10)), k=8)
>>> [6, 3, 5, 5, 9, 4, 4, 2]
  • 无替换选择:random.sample(seq, k)
random.sample(list(range(10)), k=8)
>>> [1, 5, 3, 7, 2, 0, 8, 4]


复制:浅与深

  • 浅拷贝:copy() 拷贝原始对象的引用。 对原始对象所做的更改也会反映在浅拷贝中
import copya = [[1, 2], [3, 4]]
b = copy.copy(a); b
>>> [[1, 2], [3, 4]]a[1].append(5)
b
>>> [[1, 2], [3, 4, 5]]
  • 深拷贝:deepcopy() 插入在原始对象中找到的对象的副本。 对原始对象所做的更改不会影响深层副本。
a = tp_exit_ids_items = list()
c = copy.deepcopy(a); c
>>> [[1, 2], [3, 4]]a[1].append(5)
c
>>> [[1, 2], [3, 4]]


等价与平等

  • 两者是否具有相同的值:==
a = [[1, 2], [3, 4]]
b = [[1, 2], [3, 4]]
c = a# equivalent check
a == b
>>> True
a == c
>>> True
  • 是否都指向同一个对象:是
# equality check
a is b
>>> False
a is c
>>> True


搜索子字符串

有四种方法可以在字符串中搜索子字符串:

  • str.find(sub, start=None, end=None) 和 str.rfind(...)
  • str.index(sub, start=None, end=None) 和 str.rindex(...)

以下操作都返回结果 4,因为在索引 4 处找到“on”:

"python".find("on")
"python".rfind("on")
"python".index("on")
"python".rindex("on")

最重要的区别是 find() 和 rfind() 如果 sub 不成立则返回 -1; index() 和 rindex() 抛出一个 ValueError 代替:

"python".find("a")
>>> -1"python".index("a")
>>> ValueError: substring not found


关注七爪网,获取更多APP/小程序/网站源码资源!

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章