在python3中,这样输入是错的吗

2586人阅读
milang(小语)(257)
打开的命令行交互窗口,并且在里面进行下面的输入:Python&3.4.1&(v3.4.1:c0e311e010fc,&May&18&:22)&[MSC&v.1600&32&bit&(Intel)]&on&win32Type&&help&,&&copyright&,&&credits&&or&&license&&for&more&information.&&&&print&10000L&&File&&&stdin&&,&line&1&&&&print&10000L&&&&&&&&&&&&&&^SyntaxError:&invalid&syntax&&&&10000L&&File&&&stdin&&,&line&1&&&&10000L&&&&&&&&&^SyntaxError:&invalid&syntax&发现在这里全部报语法错误(SyntaxError:&invalid&syntax),而在Python&3.0以前的版本都是运行正确的,这里的原因就是之后采用不同的语法,在长整数方面已经取消在整数后面添加的语法,因为所有数字会自动识别为短整数,还是长整数,不需要增加了。另外语句已经删除,采用函数来替代码输出,这样可以精简语法,用尽量少的语句。因此,采用下面的输入,就是正确的:&&&&&print(10000)10000&&&&1000010000&犯这种错误,就是没有理解Python3.0版本与之前版本的语法区别。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5229093次
积分:65578
积分:65578
排名:第26名
原创:1428篇
转载:58篇
评论:2039条
难度:初级
类型:技术教程
难度:初级
类型:实战教学
难度:初级
类型:实战教学
(12)(81)(40)(17)(32)(10)(1)(12)(1)(11)(17)(10)(9)(11)(11)(10)(11)(11)(11)(21)(10)(7)(9)(7)(8)(6)(3)(17)(12)(20)(6)(7)(21)(1)(5)(1)(1)(3)(3)(4)(6)(4)(4)(7)(11)(2)(3)(5)(4)(8)(4)(7)(1)(4)(4)(4)(7)(2)(7)(8)(2)(4)(5)(3)(7)(5)(4)(15)(1)(5)(10)(17)(25)(26)(23)(25)(24)(20)(1)(1)(3)(8)(8)(13)(9)(12)(17)(3)(13)(24)(29)(21)(10)(20)(14)(20)(16)(19)(15)(32)(29)(25)(12)(3)(3)(19)(24)(4)(1)(10)(16)(1)(4)(1)(1)(11)(4)(1)(1)(1)(11)(2)(2)(4)(1)(3)(21)(132)(36)求助帖 为什么我的python3在做这个例子的时候出错_python吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:134,061贴子:
求助帖 为什么我的python3在做这个例子的时候出错收藏
可以看到,这两个身份内存是不同的,可是为什么运行出来是True,这个是在pycharm上运行的。在交互模式下运行结果是对的,那个大神能帮我分析一下。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或python(22)
1.1 Print是一个函数
在Python3中print是个函数,这意味着在使用的时候必须带上小括号,并且它是带有参数的。
& &&&&& print 'hello world'
& SyntaxError: Missing parentheses in call to 'print'
版本更新后,3.X的版本中去掉了很多的函数,在3.X版本的python中,print需要加上括号
& &&&&& print ('hello world')
& & hello world
&另:将数据输出为一组时,python2.x直接在需要输出数据后面加上“,”即可,但python3.x中使用此方法无效,应该使用如下代码:
& & &&&&&&&print (item, end=& &)
格式化输出
类似于C中的 printf,&&%字符:标记转换说明符的开始
在Python 3.2.3中 &input和raw_input 整合了,没有了raw_input
# pythong3中,这个是python3中的写法,注意end='',是一对单引号
for x in range(0,10):
print(x,end= '')
#python2中,是用一个逗号
for x in range(0,10):
0 1 2 3 4 5 6 7 8 9
&code class=&hljs php&&old: &span
class=&hljs-keyword&&print
(x, y)&& &span class=&hljs-comment&&
&span class=&hljs-keyword&&new: &span
class=&hljs-keyword&&print((x, y))& &span
class=&hljs-comment&&
在Python3中还可以定义分隔符,使用参数sep来指定.
print(&There are &&, 2+5, &&possibilities&, sep=&&)
上面代码的结果如下:
print()函数不支持Python2.X中print中的“软空格”。在Python2.X中,print &A\n&, &B&的结果是&A\nB\n&;而在Python3中print(&A\n&, &B&)的结果是&A\n B\n&。
在刚开始使用Python3的时候,你会发现你经常在交互模式下你还是经常使用老式的语法print x,是时候锻炼你的手指用print(x)来取代它啦。
如果你的项目比较大,而又想升级到Python3的时候,不用担心,2to3这个工具会将所有的print语句转换为print()函数。
& &&&& myName=raw_input('Ener your name:')
& &Traceback (most recent call last):
& &File &&pyshell#129&&, line 1, in &module&
& &myName=raw_input('Ener your name:')
& &NameError: name 'raw_input' is not defined
& 同1,因版本问题。可直接用input代替
& & &&&& myName=input('Ener your name:')
& & Ener your name:cookie
& & &&&&&print (decimal.Decimal('1.1'))
& & Traceback (most recent call last):
& & File &C:/Users/cookie/Desktop/bb.py&, line 2, in &module&
& & print (decimal.Decimal('1.1'))
& & NameError: name 'decimal' is not defined
错误提示‘decimal’ 未定义,导入decimal包即可
& & &&&& import decimal
& & &&&& print (decimal.Decimal('1.1'))
& & & & &1.1
4.使用Views和Iterators代替Lists
dict的方法dict.keys(),dict.items(),dict.values()不会再返回列表,而是返回一个易读的“views”。这样一来,像这样的语法将不再有用了:k = d.keys();k.sort(),你可以使用k = sorted(d)来代替。sorted(d)在Python2.5及以后的版本中也有用,但是Python3效率更高了。
&code class=&hljs bash&&d
class=&hljs-string&&'a':
d.keys()&&&& &span
class=&hljs-comment&&
d.items()&&& &span
class=&hljs-comment&&
d.values()&& &span
class=&hljs-comment&&
d.keys(); k.sort()&&&& &span class=&hljs-comment&&
同样,dict.iterkeys(),dict.iteritems(),dict.itervalues()方法也不再支持。
map()和filter()将返回iterators。如果你真的想要得到列表,list(map(...))是一个快速的方法,但是更好的方法是使用列表推导(尤其是原代码使用了lambda表达式的时候),或者重写原来的代码,改为不需要使用列表。特别是map()会给函数带来副作用,正确的方法是改为使用for循环,因为创建一个列表是非常浪费的事情。
Python3中的range()函数跟Python2.X的xrange()函数的作用是一样的,这样可以使用任意的数字,Python3中去除了xrange()函数。
zip()在Python3中返回的是一个迭代器。
& & &Python3简化了比较符。
在使用比较符(&,&=,&=,&)时,当相比较的操作数的排序是没有意义的时候将会抛出TypeError异常,因此像1 & '',0 & None,len &= len这样的语句不再合法了。None & None也会抛出TypeError异常,而不是返回False。你应该明白了,胡乱的比较是没有意义的,相比较的元素必须是能够比较的才行。需要注意的是,==和!=不包括在内,因为不通类型的,无法比较元素总是不等于另一个的。
builtin.sorted和list.sort()不再有提供比较函数的cmp参数,只有参数key和reverse。
cmp()函数应该当做被去除了,__cmp__()特殊方法也不再支持。在需要的时候使用__lt__,__eg__和__hash__。
从本质上来说,long重命名了int,因为在内置只有一个名为int的整型,但它基本跟之前的long一样。
像1/2这样的语句将返回float,即0.5。使用1//2来获取整型,这也是之前版本所谓的“地板除”。
移除了sys.maxint,因为整型数已经没了限制。sys.maxsize可以用来当做一个比任何列表和字符串下标都要大的整型数。
repr()中比较大的整型数将不再带有L后缀。
八进制数的字面量使用0o720代替了0720。
7 Text Vs. Data 代替 Unicode Vs. 8-bit
& & &Python3中改变了二进制数据和Unicode字符串。
Python3使用文本和(二进制)数据的理念代替之前的Unicode字符串和8-bit字符串,所有的文本默认是Unicode编码。使用str类型保存文本,使用bytes类型保存数据。当你混淆文本和数据的时候Python3会抛出TypeError的错误。
不能再使用u&...&字面量表示unicode文本,而必须使用b&...&字面量表示二进制数据。
因为str和bytes不能弄混,所以你必须显式地将他们进行转换。使用str.encode()将str转换为bytes,使用bytes.decode()将bytes转换为str,也可以使用bytes(s, encoding=...)和str(b, encoding=...)。
str和bytes都是不可变的类型,有一个分离的可变类型的bytearray可以保存缓存的二进制数据,所有能够接受bytes的API都能够使用bytearray。这些可变的API是基于collections.MutableSequence的。
移除了抽象类型basestring,使用str代替。
文件默认使用文本类型打开,这也是open()函数默认的。如果要打开二进制文件必须使用b参数,否则会出现错误,而不会默默地提供错误的数据。
文件名都使用unicode字符串传入和输出,变量名也是,所以可以使用中文作为变量名,例如&中国=&China&; print(中国)&。关于 python2 的编码问题请参考:详解python中文编码与处理&
一些关于系统的API,如os.environ和sys.argv,当系统允许bytes并且不能正常转换为unicode的话,也会出现问题。所以,将系统的LANG设置好是最好的做法。
repr()函数不再转义非ASCII字符。
代码默认为UTF-8编码。
移除了StringIO和cStringIO。加入了io模块,并分别使用io.StringIO和io.BytesIO分别用于text和data。
2、语法改变
2.1 新增语法
函数变量和返回值。
nonlocal声明。使用nonlocal x可以直接引用一个外部作用域的变量,但不是全局变量。
扩展了迭代的解包。
&code class=&hljs bash&&(a,
= range(5)&
class=&hljs-comment&&
rest &span
class=&hljs-comment&&
class=&hljs-comment&&
字典推导。{k: v for k, v in stuff }。
t = ((1,1), (2,2))
d = {k: v for k, v in t}
集合推导。{x for x in stuff},与set(stuff)效果一样,但是更加灵活。
八进制字面量0o720。
二进制字面量0b1010,相当于新的内置函数bin()。
字节字面量b或者B,相当于新的内置函数bytes()。
2.2 改变的语法
将except exc, var改为except exc as var。
新的元类语法。
&code class=&hljs python&&&span
class=&hljs-comment&&
&span class=&hljs-class&&&span
class=&hljs-keyword&&&span
class=&hljs-class&&&span
class=&hljs-keyword&&class&span
class=&hljs-class&& &span
class=&hljs-title&&&span
class=&hljs-class&&&span
class=&hljs-title&&C&span
class=&hljs-class&&:
&&&&__metaclass__
&span class=&hljs-comment&&
&span class=&hljs-class&&&span
class=&hljs-keyword&&&span
class=&hljs-class&&&span
class=&hljs-keyword&&class&span
class=&hljs-class&& &span
class=&hljs-title&&&span
class=&hljs-class&&&span
class=&hljs-title&&C&span
class=&hljs-params&&&span
class=&hljs-class&&&span
class=&hljs-params&&(metaclass=M)&span
class=&hljs-class&&:&
&&&&....&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/span&&/code&
列表推导不再支持[... for var in item1, item2, ...],必须写成[... for var in (item1, item2,...)]。
省略号...作为连续表达式可以用于任何地方,之前只能用于分片中。但是必须连续写,之前带空格的. . .不再支持。
2.3 移除的语法
移除了元组的解包。不能再写def foo(a, (b, c)): ....,需要写成def foo(a, b_c):b, c = b_c。
移除&&,使用!=代替。
exec()不能再作为关键词,只能作为一个函数。并且exec()不再支持流变量,如exec(f)需写成exec(f.read())。
整型不支持l/L后缀。
字符串不支持'u/U'前缀。
from module import *只能用在模块级,在函数中不可使用。
所有不以.开始的import语句均作为绝对路径的import对待。
移除了经典类。
3、推荐阅读:
使用 2to3 将代码移植到 Python 3
Moving from Python 2 to Python 3
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4547次
排名:千里之外
原创:28篇
转载:75篇
(1)(31)(43)(22)(5)(1)你正在使用的浏览器版本过低,将不能正常浏览和使用知乎。如何在Python3中实现将输入的数据保存在自身(源代码)中?
如何在Python3中实现将输入的数据保存在自身(源代码)中?
试图在几个变量中永久性存储程序运行时的输入值,即在程序重新运行时那几个变量不会被初始化。
或者只是单纯的在源文件最后附上输入信息。
使用&&&& f = open('./postfix.py','a')
&&&&&&&&&&& f.write(str(x))
&&&&&&&&&&& f.close()
是不可以的。
兄弟 你要的是热升级么&}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信