小编Top*_*her的帖子

为什么可以在循环中声明复制objective-C对象,但不能按顺序声明?

我只是在学习Objective-C,我想知道为什么以下代码会导致错误?

Person *p = [[Person alloc] init];
Person *p = [[Person alloc] init];
Run Code Online (Sandbox Code Playgroud)

在这种情况下,第二行给出一个错误,指出已经定义了"p"指针.

这对我来说很有意义; 但是,如果无法重新定义指针,那么为什么以下代码有效?

for(int i = 0; i<10; i+=1) {
    Person *p = [[Person alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

当我在XCode中输入它时,它不会给出任何错误,它编译并运行得很好.在这种情况下,我希望循环只是重新定义"p"指针,类似于顺序声明它们,但事实并非如此.

有没有人解释为什么会这样?

xcode scope objective-c

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

如何更改iPython的内核/ python版本?

我在OS X 10.10中使用pip安装了iPython,它给了我"ipython"和"ipython2"命令,这些命令运行得很好,但它们使用OS X的默认python版本2.7.9.我下载并安装了Python3.4的最新版本,可以使用命令"python3"加载它,但找不到让iPython使用这个版本的python的方法.iPython Web站点声明该包可以与python版本3.3及更高版本一起使用,但是我找不到任何关于如何更改所使用的默认python版本的指令.

到目前为止,我发现iPython的jupyter包在/ usr/local/share/jupyter/kernels /中有一个内核规范,它只是一个名为"python2"的文件夹,其中包含指向系统的python 2.7.6的json文件. ,但改变这一点指向新的python3.4安装不起作用.我猜这个配置适用于ipython笔记本.

我也试过这里的方法:ipython读取错误的python版本

这样做我在/ user/local/bin /中复制了ipython2命令并编辑它以使用位于/Library/Frameworks/Python.framework/Versions/3.4/bin/python3的python3解释器,但是,这给了我错误"ImportError:没有名为'IPython'的模块",这表明python3安装没有安装ipython.

为了解决这个问题,我尝试卸载ipython并使用pip重新安装它,但它只是针对系统的Python 2.7安装而没有为python3做任何事情.

有谁知道如何配置iPython使用不同的python版本,甚至为python3安装单独的ipython安装?最终根据我的需要快速来回切换会很不错.

python macos ipython

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

在 ipython 中给出“缺少 1 个必需的位置参数”的简单类定义

这是我的类文件(称为 myclasses.py):

class wave:
    def __init__(self, name = "", xdelta = 1)
        self.name = name
        self.xdelta = xdelta

    def loadbinary(bpath):
        print(bpath)
Run Code Online (Sandbox Code Playgroud)

现在我已经去掉了其他细节(加载二进制文件代码等),当我运行以下命令时,我得到了一个错误输出:

import myclasses
a = myclasses.wave
a.loadbinary('TEST')
Run Code Online (Sandbox Code Playgroud)

错误:

TypeError: loadbinary() missing 1 required positional argument: 'bpath'
Run Code Online (Sandbox Code Playgroud)

我试过将 loadbinary 定义更改为“loadbinary(self, bpath)”,但它给出了相同的错误。我也试过用“pass”替换“print”代码,让它什么都不做,但这仍然给我错误。我也试过运行以下命令:

a.loadbinary(bpath='TEST')
Run Code Online (Sandbox Code Playgroud)

...但这将错误更改为:loadbinary() 缺少 1 个必需的位置参数:'self'

在这一点上,我不确定发生了什么。类定义是基本的,不从其他类继承,据我所知,遵循此处显示的类的 Python 文档中的代码:https : //docs.python.org/2/tutorial/classes.html

我使用的是 Python 3.4.3,这发生在运行在 PyCharm 4.5.1 中的 iPython 3.1.0 中。如果我直接在命令提示符(OS X 终端)下在 iPython 3.1.0 中运行它,我会得到以下错误输出:

unbound method loadbinary() must be called with wave instance as first argument (got str …
Run Code Online (Sandbox Code Playgroud)

python class

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

将 Objective-C NSNumber 对象分配给 int 变量的说明?

谁能解释为什么这在 Objective-C 中有效?我希望它给出一个错误,因为一个对象被分配给一个 int 变量。我知道它确实有效,这很棒,但我想知道为什么允许这样做?

int i = [NSNumber numberWithInt:123];
Run Code Online (Sandbox Code Playgroud)

此外,这似乎存储了错误的值(即,在我的系统上,当我使用 NSLog 打印出“i”的值时,我得到的是“252711”而不是 123);但是,只有在我的主代码中声明和分配变量时。如果我将其声明为对象的实例变量,然后使用键值编码为其赋值,则它可以正常工作:

对象实例变量...

@interface myObject : NSObject
{
    int anInt;
}
Run Code Online (Sandbox Code Playgroud)

主要代码...

[myObject setValue:[NSNumber numberWithInt:123] forKey:@"anInt"];
NSLog(@"%@", [myObject valueForKey:@"anInt"]);
Run Code Online (Sandbox Code Playgroud)

这段代码按预期打印出“123”,但我不确定为什么在使用上面看似相似的方法时它无法正常工作。

objective-c instance-variables key-value key-value-coding

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

在python列表理解中评估True和False的条件?

在python中你可以采用如下数组:

a = [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

...然后运行以下列表推导以基于条件评估元素的True:

b = [True for num in a if num > 3]
Run Code Online (Sandbox Code Playgroud)

但是,这只返回大于3的元素的真值,因此我们得到:

[True, True, True]
Run Code Online (Sandbox Code Playgroud)

我知道我们可以使用多行方法,但有没有办法在这里扩展条件语句以使其保持在这种形式的一行,如果条件不满足则返回False?最后,我希望以上为"a"返回以下内容:

[False, False, False, True, True, True]
Run Code Online (Sandbox Code Playgroud)

python arrays

0
推荐指数
2
解决办法
2339
查看次数