小编Lor*_*ing的帖子

在Python中重载int()

假设我在Python 3中有一个基本类,它代表一些类似数字的数据类型.我想这样做,当我有一个这个类的实例,我可以调用int(x)并让它调用我的转换函数来返回整数部分.

我确信这很简单,但我似乎无法找到如何做到这一点.

python class operator-overloading

10
推荐指数
2
解决办法
7532
查看次数

Python 3.3的收益率来自

Python 3带来了yield from语义.据我所知,它应该屈服于最外层的生成器,在这种情况下,我希望这个代码是线性的N.

from collections import Iterable

def flatten(L):
  for e in L:
    if isinstance(e, Iterable):
      yield from flatten(e)
    else:
      yield e 

N = 100
L = [-1]
for i in range(N):
  L = [i, [L], i]
for i in range(100):
  f = list(flatten(L))
print(len(f))
Run Code Online (Sandbox Code Playgroud)

N=200然而,如果我设置的计算时间大约是计算时间的四倍,则表明展平是长度的二次方L.我无法理解为什么会这样,因为代码只访问每个元素一次,yield from关键字应该直接从内部生成器发送值到收集到列表中的术语.

这是一个错误,根本不是故意的,还是我使用它错了?有没有一种很好的方法在Python中进行O(N)展平?

python functional-programming yield

6
推荐指数
1
解决办法
2380
查看次数

Python如何处理全局变量?

我在Python中遇到了一些奇怪的全局变量处理.我希望有人可以解释并证明这些惊喜!

A)此代码按预期打印10:

def func():
  print(a)
a = 10
func()
Run Code Online (Sandbox Code Playgroud)

B)此代码引发了一个过早引用的异常:

def func():
  print(a)
  a += 1
a = 10
func()
Run Code Online (Sandbox Code Playgroud)

C)但是这段代码按预期打印[10]:

def func():
  print(a)
  a.append(1)
a = [10]
func()
Run Code Online (Sandbox Code Playgroud)

因此,我可以收集到a其范围的变化类型以及后来甚至尚未达到的声明,这些变更的方式也有所改变a.我知道我可以global a在函数的开头使用,但它相当冗长.

任何人都可以告诉我Python正在使用哪些规则来处理其奇怪的范围?

python

3
推荐指数
1
解决办法
132
查看次数

这是gmpy2中的错误还是我疯了?

我正在尝试在gmpy2中使用gcdext函数,但无论我将什么作为参数,我总是得到结果(0,0,1).我希望这是一个错误,但只是检查,这是否应该导致(0,0,1)?

from gmpy2 import *
print(gcdext(13, 21)) #Should be (1,-8,5)?
Run Code Online (Sandbox Code Playgroud)

python math gmp

1
推荐指数
1
解决办法
191
查看次数