小编Jim*_*ard的帖子

访问 os.scandir 中的第一个元素

os.scandir用于获取文件夹中的文件列表:

img_list2 = os.scandir('/home/shared/test')
Run Code Online (Sandbox Code Playgroud)

我想获得第一个元素。

我在尝试 img_list2.next()

>>> img_list2.next()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'posix.ScandirIterator' object has no attribute 'next'
Run Code Online (Sandbox Code Playgroud)

所以我试过:

>>> filt = list(img_list2)
>>> type(filt)
<class 'list'>
>>> globals()['filt']
[<DirEntry 'panaroma00010.jpg'>, <DirEntry 'panaroma00014.jpg'>, <DirEntry 'panaroma00004.jpg'>, <DirEntry 'panaroma00013.jpg'>, <DirEntry 'panaroma00007.jpg'>, <DirEntry 'panaroma00011.jpg'>, <DirEntry 'panaroma00012.jpg'>, <DirEntry 'panaroma00006.jpg'>, <DirEntry 'panaroma00009.jpg'>, <DirEntry 'panaroma00001.jpg'>, <DirEntry 'panaroma00003.jpg'>, <DirEntry 'panaroma00005.jpg'>, <DirEntry 'panaroma00002.jpg'>, <DirEntry 'panaroma00008.jpg'>]
>>> filt[1]
<DirEntry 'panaroma00014.jpg'>
>>> 
Run Code Online (Sandbox Code Playgroud)

所以就像在列表中我们可以获得第一个元素值,我们可以从os.scandir?

python python-3.x

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

具有两个"同步"变量的类的最短示例

我正在尝试实现一个代表(几何)圆的类的最简单的例子,并且可以打印自己的数据.

Circle是一个有两个变量的类,self.radiusself.area.唯一的要求是,当更改一个变量时,另一个变量也会发生变化.

最简单的方法是什么?是property装饰品吗?

这是我的尝试.

import math


class Circle:

    def __init__(self, radius=1):
        self._radius = radius
        self._area = math.pi * radius**2

    @property
    def radius(self):
        return self._radius

    @radius.setter
    def radius(self, radius):
        self._radius = radius
        self._area = math.pi * radius**2

    @property
    def area(self):
        return self._area

    @area.setter
    def area(self, area):
        self._area = area
        self._radius = math.sqrt(area / math.pi)

    def __repr__(self):
        return 'radius {:.2f}  area {:.2f}'.format(self._radius, self._area)


c = Circle()
print(c)

c.radius = 110
print(c)

c.area = 3
print(c) …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

我什么时候应该重新定义数字?

在Python 2,我可以重新定义的任何数量与所述ctypes模块,例如数23:

import ctypes

value = 2
ob_ival_offset = ctypes.sizeof(ctypes.c_size_t) + ctypes.sizeof(ctypes.c_voidp)
ob_ival = ctypes.c_int.from_address(id(value)+ob_ival_offset)
ob_ival.value = 3

print 1+1
Run Code Online (Sandbox Code Playgroud)

我应该什么时候需要这样做?

python ctypes python-2.7

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

当我希望它返回15时,为什么这个表达式返回10?

在Python控制台中,此代码应返回15,但它返回10.有什么问题?

print(sum(range(5)))
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

打印不带模块前缀的类类型

我有很多类类型(源自type)。当我打印它们时,我得到类似的东西:

...
<class 'Default.new_templates.NewSnippetCommand'>
<class 'Default.new_templates.NewSyntaxCommand'>
<class 'Default.pane.ClosePaneCommand'>
<class 'Default.pane.FocusNeighboringGroup'>
<class 'Default.pane.MoveToNeighboringGroup'>
<class 'Default.pane.NewPaneCommand'>
<class 'Default.pane.SetMaxColumns'>
...
Run Code Online (Sandbox Code Playgroud)

我想打印:

...
NewSnippetCommand
NewSyntaxCommand
ClosePaneCommand
FocusNeighboringGroup
MoveToNeighboringGroup
NewPaneCommand
SetMaxColumns
...
Run Code Online (Sandbox Code Playgroud)

如何获取类名部分并省略模块部分?

python class python-3.x

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

如何将类“过滤器”的实例直接转换为str

url = 'https://www.shanbay.com/read/article/97936/' 
temp = filter(str.isdigit,url)    #slect numbers
Run Code Online (Sandbox Code Playgroud)

除了使用for...in expression,我temp可以str直接转换为吗?

python python-3.x

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

循环比循环快1000倍?

因此,之前已多次询问有关for循环速度与while循环速度的问题.for循环应该更快.
但是,当我在Python 3.5.1中测试它时,结果如下:

timeit.timeit('for i in range(10000): True', number=10000)
>>> 12.697646026868842
timeit.timeit('while i<10000: True; i+=1',setup='i=0', number=10000)
>>> 0.0032265179766799434
Run Code Online (Sandbox Code Playgroud)

while循环运行速度比for循环快3000倍!我也试过为for循环预生成一个列表:

timeit.timeit('for i in lis: True',setup='lis = [x for x in range(10000)]', number=10000)
>>> 3.638794646750142
timeit.timeit('while i<10000: True; i+=1',setup='i=0', number=10000)
>>> 0.0032454974941904524
Run Code Online (Sandbox Code Playgroud)

这使得for循环速度提高了3倍,但差异仍然是3个数量级.

为什么会这样?

python performance loops python-3.x

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

string.rstrip()正在删除多余的字符

为什么这个语句会删除'E'in 'PIPELINE':

In: 'PIPELINE_DEV'.rstrip('_DEV')
Out: 'PIPELIN'
Run Code Online (Sandbox Code Playgroud)

但是这个声明没有删除'S':

In: 'PIPELINES_DEV'.rstrip('_DEV')
Out: 'PIPELINES'
Run Code Online (Sandbox Code Playgroud)

该声明最后删除了所有的E:

In: 'PIPELINEEEEEEEE_DEV'.rstrip('_DEV')
Out: 'PIPELIN'
Run Code Online (Sandbox Code Playgroud)

当我将rstrip转换为2个单独的语句时,它可以正常工作:

In: 'PIPELINE_DEV'.rstrip('DEV').rstrip('_')
Out: 'PIPELINE'
Run Code Online (Sandbox Code Playgroud)

python string python-3.x

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

在 C 扩展中返回多个输出?

Python 允许使用逗号作为分隔值返回多个结果。

在开发用C语言编写的CPython扩展时,是否有可能获得相同的结果?如何?

我正在开发一个 CPython 扩展来替换现有的 Python 代码来对性能进行一些测试,我更喜欢使用相同的界面来不更改现有的代码库。

我正在使用 Python 3.6。

c python cpython python-3.x

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

RecursionError:获取对象的str时超出了最大递归深度

在这里看到这么多关于这个问题的例子,但是不能理清我的例子.

任何sugegstion将是欣赏,已经有他的recursiona dd无法修复它的headdake.

tree = {}

def populate_node(account):
    node = '%(LOGIN)s,%(server_id)s' % account
    tree[node]['login'] = account['LOGIN']
    tree[node]['email'] = account['EMAIL'].lower()
    tree[node]['server_id'] = account['server_id']

for account in accounts:
    node = '%(LOGIN)s,%(server_id)s' % account
    parent = None
    if account['AGENT_ACCOUNT']:
        parent = '%(AGENT_ACCOUNT)s,%(server_id)s' % account
    if node not in tree:
        tree[node] = {}
    populate_node(account)
    if parent:
        tree[node]['parent'] = parent
        if parent not in tree:
            tree[parent] = {
                'login': parent,
                'server_id': account['server_id'],
                'children': [node],
            }
        else:
            if 'children' not in tree[parent]:
                tree[parent]['children'] = [node]
            else: …
Run Code Online (Sandbox Code Playgroud)

python recursion python-3.5

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