小编tza*_*man的帖子

Python是否允许递归的__iter__函数?

我正在尝试编写一个__iter__应该递归遍历目录的函数(包括子目录),并且由于它的结构是任意的,我认为递归函数是可行的.但它没有用.

这就是我所拥有的:

class Dummy(object):

    def __init__(self, directory):
        self.directory = directory

    def _iterate_on_dir(self, path):
        '''
        Internal helper recursive function.
        '''
        for filename in os.listdir(path):
            full_path = os.path.join(path, filename)
            if os.path.isdir(full_path):
                self._iterate_on_dir(full_path)
            else:
                yield full_path

    def __iter__(self):
        '''
        Yield filenames
        '''
        return self._iterate_on_dir(self.directory)
Run Code Online (Sandbox Code Playgroud)

一些print陈述告诉我,递归调用只是被忽略了.

我怎么能做到这一点?

python recursion iterator generator

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

在 for 循环上使用 python 多重处理将结果附加到字典中

因此,我查看了多处理模块的文档,也查看了此处提出的其他问题,但似乎没有一个与我的情况相似,因此我开始了一个新问题。

为了简单起见,我有一段如下形式的代码:

# simple dataframe of some users and their properties.
data = {'userId': [1, 2, 3, 4],
        'property': [12, 11, 13, 43]}
df = pd.DataFrame.from_dict(data)

# a function that generates permutations of the above users, in the form of a list of lists
# such as [[1,2,3,4], [2,1,3,4], [2,3,4,1], [2,4,1,3]]
user_perm = generate_permutations(nr_perm=4)

# a function that computes some relation between users
def comp_rel(df, permutation, user_dict):
    df1 = df.userId.isin(permutation[0])
    df2 = df.userId.isin(permutation[1])
    user_dict[permutation[0]] += permutation[1]
    return user_dict


# and …
Run Code Online (Sandbox Code Playgroud)

python dictionary multiprocessing python-3.x

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

使用生成器在BST上执行inorder树遍历

所以给出以下内容:

def inorder(t):
    if t:
        inorder(t.left)
        yield t.key
        inorder(t.right)

x = [ n for n in inorder(r) ]
Run Code Online (Sandbox Code Playgroud)

x 只包含根节点,为什么?

这是完整的代码; 请注意,BST实现是正确的,它是inorder()生成器的实现,不知何故是错误的.

class STree(object):
    def __init__(self, value):
        self.key = value
        self.left = None
        self.right = None

def insert(r, node):
    if node.key < r.key:
        if r.left is None:
            r.left = node
        else:
            insert(r.left, node)
    else:
        if r.right is None:
            r.right = node
        else:
            insert(r.right, node)

def inorder(t):
    if t:
        inorder(t.left)
        yield t.key
        inorder(t.right)


r = STree(10)
insert(r, STree(12))
insert(r, …
Run Code Online (Sandbox Code Playgroud)

python recursion generator binary-search-tree

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

Python:从字典中替换文本文件中的多个单词

我无法弄清楚我哪里出错了.因此,我需要随机替换单词并将其重新写入文本文件,直到对其他人不再有意义.我选择了一些单词来测试它,并编写了以下代码,目前无法正常工作:

# A program to read a file and replace words until it is no longer understandable

word_replacement = {'Python':'Silly Snake', 'programming':'snake charming', 'system':'table', 'systems':'tables', 'language':'spell', 'languages':'spells', 'code':'snake', 'interpreter':'charmer'}

main = open("INF108.txt", 'r+')

words = main.read().split()

main.close()

for x in word_replacement:    
    for y in words:
        if word_replacement[x][0]==y:
            y==x[1]

text = " ".join(words)

print text

new_main = open("INF108.txt", 'w')
new_main.write(text)
new_main.close()
Run Code Online (Sandbox Code Playgroud)

这是文件中的文字:

Python是一种广泛使用的通用高级编程语言.它的设计理念强调代码可读性,其语法允许程序员用比C++或Java等语言更少的代码行表达概念.该语言提供了用于在小规模和大规模上实现清晰程序的构造.Python支持多种编程范例,包括面向对象,命令式和函数式编程或程序样式.它具有动态类型系统和自动内存管理功能,并具有大型全面的标准库.Python解释器可在许多操作系统上安装,允许在各种系统上执行Python代码.使用第三方工具,如Py2exe或Pyinstaller,可以将Python代码打包到一些最流行的操作系统的独立可执行程序中,允许分发基于Python的软件,以便在这些环境中使用而无需安装一个Python解释器.

我已经尝试了一些方法,但作为Python的新手,这是一个猜测的问题,并且最近两天花在网上进行研究,但我发现的大部分答案要么太复杂,我不能理解,或是特定于该人的代码,并没有帮助我.

python dictionary replace text-files python-2.7

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

如何连续添加我的If语句内容

basicServiceFee允许10个免费连接,价格为80美元

每当连接大于10时,每个附加连接都是4美元加上基本连接

我如何添加4美元的费用,并在选择connectionsListBox中的每个数字时继续添加.

我的代码添加了前4美元的费用,然后在connectionsListBox上的11之后停止.我如何得到12另外4美元和13另外4美元

这是我的代码:

Private Function businessTotalCharges(ByVal processingFee As Double, ByVal basicServiceFee As Double,
                                 ByVal premiumChannelFee As Double, ByVal connections As Double) As Double

    Dim total As Double
    Dim perchannel As Double
    Dim totalChannelFee As Double
    Dim connectionsPrice As Double
    Dim perConnection As Double

    processingFee = 16.5
    basicServiceFee = 80

    perchannel = CDbl(premiumListBox.SelectedItem) * 50
    connections = CDbl(connectionsListBox.SelectedItem)
    premiumChannelFee = (CDbl(premiumListBox.SelectedItem))

    If connections > 10 Then
        connectionsPrice = basicServiceFee + 4
    End If

    If connections <= 10 Then
        connectionsPrice …
Run Code Online (Sandbox Code Playgroud)

vb.net

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

按位使用lambda在python中使用列表的元素

我可以通过这种方式使用lambda函数按位或者列表中的所有元素吗?

lst = [1, 1, 1]
f = lambda x: x | b for b in lst
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我会得到一个SyntaxError.

python python-2.7

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

并行任务库WaitAny Design

我刚开始探索PTL并有一个设计问题.

我的场景:我有一个URL列表,每个URL都引用一个图像.我希望每个图像并行下载.一旦下载了至少一个图像,我想执行一个对下载的图像执行某些操作的方法.该方法不应该并行化 - 它应该是串行的.

我认为以下内容可行,但我不确定这是否是正确的方法.因为我有收集图像的单独类以及对收集的图像做"某事",所以我最终传递了一系列任务,这似乎是错误的,因为它暴露了如何检索图像的内部工作方式.但我不知道如何解决这个问题.实际上,这两种方法都有更多,但这对此并不重要.只要知道它们真的不应该归结为一个大的方法,它既可以检索也可以对图像做一些事情.

//From the Director class
Task<Image>[] downloadTasks = collector.RetrieveImages(listOfURLs);

for (int i = 0; i < listOfURLs.Count; i++)
{
    //Wait for any of the remaining downloads to complete
    int completedIndex = Task<Image>.WaitAny(downloadTasks);
    Image completedImage = downloadTasks[completedIndex].Result;

    //Now do something with the image (this "something" must happen serially)
    //Uses the "Formatter" class to accomplish this let's say
}

///////////////////////////////////////////////////

//From the Collector class
public Task<Image>[] RetrieveImages(List<string> urls)
{
    Task<Image>[] tasks = new Task<Image>[urls.Count];

    int index …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library

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

阻止请求

什么是一个具有禁止请求服务器连接是什么意思?

谢谢!

blocking

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

奇怪的指针行为 C++/继承

我目前正在使用指针,我想知道我是否正在做一些根本不起作用的事情。

对于某些背景,我创建了一个基类和一个派生类。这个派生类继承了一些成员变量和这些变量的一些获取/设置函数。这个派生类还实现了两个从基类继承的纯虚函数。

现在在包含与这些类交互的代码的主文件中,我有三个函数,分别称为 f1、main 和 f2。

F1 创建派生类的实例并返回指向该派生类的基类指针。在这个类F1中,我检查了int成员变量是否被设置为正确的数字,我还检查了派生类继承的虚函数是否正确实现。变量和函数都在 F1 范围内设置/正常工作。

Main 接收指向这个派生类的这个基类指针。在这个 main 函数中,我再次检查 int 成员变量是否设置为正确的数字,并且我还检查了派生类继承的虚函数是否正确实现。变量和函数都在主作用域中设置/正常工作。

但是,当我将指针作为基类指针参数传递给函数 F2 时。int 成员变量被设置为 0,当我访问虚拟函数时,我收到一个分段错误/核心转储错误。

为了进一步缩小原因,我访问了派生类实现文件,并在实现文件中创建了一个对象实例,并看到一切都按预期工作。

总而言之,我有一个指向派生类对象的基类指针。函数调用在创建它的函数和返回到的函数中完美地适用于这个指针。只有当指针作为基类指针的参数传递时,我才开始看到成员变量设置为 0 并且函数调用导致分段错误/核心转储。

我正在尝试做一些 C++ 不允许的事情吗?感谢任何人可以给我的任何帮助。

编辑:我在下面附上了代码。生物是基本情况;Goblin 是派生的 Case;功能 F1:

Creature* characterSelect()
{
    Creature* creature;
    Goblin gb1 = Goblin();
    creature = &gb1;
    return creature;
}
Run Code Online (Sandbox Code Playgroud)

c++ inheritance pointers

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