Python “的用法和含义;在;在if语句中?
在Zed Shaw的《艰苦学习Python》中的一个示例中,其中一个练习显示以下代码:Python “的用法和含义;在;在if语句中?,python,Python,在Zed Shaw的《艰苦学习Python》中的一个示例中,其中一个练习显示以下代码: next = raw_input("> ") if "0" in next or "1" in next: how_much = int(next) 我很难理解这句话中的含义。我习惯于使用if语句,例如在javascript中,其中的语法类似于: var = 5; if (var > 3) { //code to be executed } 语句(python中)中的if/是
next = raw_input("> ")
if "0" in next or "1" in next:
how_much = int(next)
我很难理解这句话中的含义。我习惯于使用if
语句,例如在javascript中,其中的语法类似于:
var = 5;
if (var > 3) {
//code to be executed
}
语句(python中)中的if
/是否与javascript中的if()
相同
要找到这个问题的答案很难,因为
中的字符串非常短,无法通过搜索引擎缩小答案的范围,而且我不知道其操作的正确名称。这取决于下一步是什么
如果它是一个字符串(如您的示例中所示),那么
中的将检查子字符串
>>> "in" in "indigo"
True
>>> "in" in "violet"
False
>>> "0" in "10"
True
>>> "1" in "10"
True
如果它是一种不同类型的iterable(列表、元组、集合、字典…),那么
中的将检查成员资格
>>> "in" in ["in", "out"]
True
>>> "in" in ["indigo", "violet"]
False
在字典中,成员资格被视为“关键之一”:
在b
中使用a可以简单地转换为b.uu包含uuu(a)
,如果b包含或不包含a,则返回
但是,您的示例看起来有点奇怪,它接受用户的输入,并将其整数值分配给变量,如果输入包含“0”
或“1”
,这些示例可能有助于说明中的功能。它基本上转化为此项目是否在其他项目中?
listOfNums = [ 1, 2, 3, 4, 5, 6, 45, 'j' ]
>>> 3 in listOfNums:
>>> True
>>> 'j' in listOfNums:
>>> True
>>> 66 in listOfNums:
>>> False
您已经习惯于使用javascriptif
,我想您知道它是如何工作的
中的是一种python式的迭代实现方式。非程序性思考者应该更容易接受,但讽刺的是,这有时会让程序性思考者更难接受
当你说如果x在y中
,你实际上是在说:
“如果x
位于y
”,则假定y
具有索引。在该if
语句中,根据条件检查y
中每个索引处的每个对象
同样地
y轴中x轴的
迭代y
中的x
,其中y
是可索引的项目集
以这种方式(伪代码)考虑if
情况:
它为您处理下一步的迭代
快乐编码 这里的raw\u input
是string
,因此如果您想检查,如果var>3
,那么您应该将next转换为double,即float(next)
并按照如果float(next)>3
的方法进行操作,但在大多数情况下,保留字“in”用于查看可以迭代的对象内部
list_obj = ['a', 'b', 'c']
tuple_obj = ('a', 1, 2.0)
dict_obj = {'a': 1, 'b': 2.0}
obj_to_find = 'c'
if obj_to_find in list_obj:
print('Object {0} is in {1}'.format(obj_to_find, list_obj))
obj_to_find = 2.0
if obj_to_find in tuple_obj:
print('Object {0} is in {1}'.format(obj_to_find, tuple_obj))
obj_to_find = 'b'
if obj_to_find in dict_obj:
print('Object {0} is in {1}'.format(obj_to_find, dict_obj))
输出:
Object c is in ['a', 'b', 'c']
Object 2.0 is in ('a', 1, 2.0)
Object b is in {'a': 1, 'b': 2.0}
然而
cannot_iterate_over = 5.5
obj_to_find = 5.5
if obj_to_find in cannot_iterate_over:
print('Object {0} is in {1}'.format(obj_to_find, cannot_iterate_over))
会扔
Traceback (most recent call last):
File "/home/jgranger/workspace/sandbox/src/csv_file_creator.py", line 43, in <module>
if obj_to_find in cannot_iterate_over:
TypeError: argument of type 'float' is not iterable
回溯(最近一次呼叫最后一次):
文件“/home/jgranger/workspace/sandbox/src/csv_File_creator.py”,第43行,在
如果obj_to_find in无法迭代:
TypeError:类型为“float”的参数不可编辑
在您的情况下,原始输入(“>”)返回iterable对象,否则它将抛出TypeError,因为您声称使用JavaScript:
var d = {1: 2, 3: 4};
if (1 in d) {
alert('true!');
}
Python操作符类似于JavaScript操作符
下面是一些JavaScript:
var d = {1: 2, 3: 4};
if (1 in d) {
alert('true!');
}
以及等效的Python:
d = {1: 2, 3: 4}
if 1 in d:
print('true!')
对于objects/dict,它们几乎是相同的,都是检查1
是否是object/dict的键。当然,最大的区别是JavaScript的键入很随意,因此d
中的'1'也同样正确
对于数组/列表,它们非常不同。JS数组是一个对象,其索引是键,因此[3,4,5]
中的1将是true
。Python列表与dict完全不同,它的in
操作符检查值,而不是索引,这往往更有用。Python将这种行为扩展到了所有的iterables
有了弦,它们就更不一样了。JS字符串不是对象,因此您将得到一个TypeError
。但是Pythonstr
或unicode
将检查另一个操作数是否是子字符串。(这意味着'123'中的1
是非法的,因为1
不能是任何内容的子字符串,但'123'中的'1
是真的。)
对象作为对象,在JS中当然没有区别,但在Python中,对象是类的实例,而不是dict。因此,在JS中,如果对象具有名为'1'
的成员或方法,则d
中的1对于该对象将为真,但在Python中,Python调用d的含义取决于您的类(通过调用它的\uuuu iter\uuuu
,如果调用失败,则尝试使用从0
开始的整数对其进行索引)
另外,请注意,JS在
中的,因为它实际上是在检查对象成员身份,所以会执行通常的JS方法解析顺序搜索,而Python在
中的,因为它是在检查dict的键、序列的成员等,所以不会执行此类操作。因此,从技术上讲,它可能比中的更接近该方法e> 接线员。这可能是一个很晚的回答。
in运算符检查成员身份。也就是说,它检查其左操作数是否为右操作数的成员。在这种情况下,raw_input()返回用户在标准输入中提供的str对象。因此,if条件检查输入是否包含子字符串“0”或“1”。考虑类型转换(int())在下一行中,if条件基本上检查输入是否包含数字0或1。它也可能有助于使用操作符搜索Google——例如,“operator”中的“python”
在最初的几个结果中准确地给出了您需要的内容。在最近的python(2.6+),您不应该使用next
作为变量名。如果您习惯使用JavaScript,您将覆盖内置函数,您怎么可能不知道它也有运算符?
d = {1: 2, 3: 4}
if 1 in d:
print('true!')