1. python3逻辑运算符not
在python中,逻辑运算符的优先级是逻辑运算符: or< and <not,所以在你的第一个问题print(1 and 2 or 3 and 4 and 6 and 7 or 8 not 9)中,优先计算not 9后发现8和false没有任何运算符连接,故会报错。此外,对于数字的运算,and取后而or取前,所以根据运算顺序可以得知print( not 1 and 2 or 3 and 4 and 6 and 7 or 8)即为print( False or 7 or 8),得到结果7.
对于数字反复运用逻辑运算符一般是没有意义的。望采纳
2. python中and、or和not 三个逻辑运算符,一直理解不了,求帮助!
‘and’、‘or’和‘not’的优先级是not>and>or
3. python用什么软件
对于学习Python的小伙伴,首推的Pycharm。
首先,PyCharm用于一般IDE具备的功能,比如, 调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。
另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持Google App Engine,
更酷的是,PyCharm支持IronPython。PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
其次是sublime text
Sublime Text 支持多种编程语言的语法高亮、拥有优秀的代码自动完成功能,还拥有代码片段(Snippet)的功能,可以将常用的代码片段保存起来,在需要时随时调用。支持 VIM 模式,可以使用Vim模式下的多数命令。支持宏,简单地说就是把操作录制下来或者自己编写命令,然后播放刚才录制的操作或者命令。
Sublime Text 还具有良好的扩展能力和完全开放的用户自定义配置与神奇实用的编辑状态恢复功能。支持强大的多行选择和多行编辑。强大的快捷命令"可以实时搜索到相应的命令、选项、snippet 和 syntex, 按下回车就可以直接执行,减少了查找的麻烦。即时的文件切换。随心所欲的跳转到任意文件的任意位置。多重选择功能允许在页面中同时存在多个光标。
还有Jupyter, Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。
Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。数据挖掘领域中最热门的比赛 Kaggle 里的资料都是Jupyter 格式 。
最后就是最基本的nopad++,最开始的时候是实用这款作为开发工具进行基础练习。
Notepad++是一套自由软件的纯文本编辑器。该软件以GPL发布,有完整的中文化接口及支持多国语言撰写的功能(采用万国码UTF-8技术)。它的功能比Windows中的记事本(Notepad)强大,除了可以用来制作一般的纯文字的帮助文档,也十分适合用作撰写电脑程序的编辑器。
建议在学习Python基础的时候还是多使用Python自带的IDLE。IDLE是开发python程序的基本IDE(集成开发环境),具备基本的IDE的功能,是非商业Python开发的不错的选择。当安装好python以后,IDLE就自动安装好了,不需要另外去找。
4. Python3有性能上的提升么
#xiaodeng
#python3
#1、编码方式和性能
'''
1、py3运行效率更快
2、默认源文件编码ASCII变为UTF-8,以前文件前加入的coding=utf-8不再需要
3、针对unicode的处理有了明显的改善,效率明显提升
'''
#2、数据类型和基本运算
'''
1、int和long进行了统一,统一为int
2、True、False、None都是关键词
3、必须以b'...'表示二进制数据,可以使用u'..'表示字符串,不加u也表示字符串
4、移除<>不等号,使用“!=”表示不等号关系
1)2!=3
2)2<>3#出现语法错误
5、调整除法符号‘/’的用法,只返回浮点数,要返回整数要使用“//”
6、py3运算对数据的类型要求更加的严格
'''
deffoo(test=None):
iftestisNone:
print(test)
foo()
print(5/2)#浮点数
print(5//2)#整数
print(1/3)
#4、print和exec用法
'''
1、print是一个函数,不再是一个语句,其中不需要用空格,后面打印的内容需要有括号括起来
2、exec函数用法发生变化
'''
deffoo():
_local=locals()
exec('a=4',globals(),_local)
a=_local['a']
print(a)
foo()
#5、input、bin、oct和for循环
'''
1、raw_input统一为input
在py2中用法为:
1)a=raw_input('请输入:')
printa
2)a=input('请输入:')#接收一个有效的表达式,如:2+3,而不能单独接收3
printa
2、for循环的变量不再泄露在全局变量中,此bug已修复
1)Python2.7.10(default,May232015,09:40:32)[MSCv.150032bit(Intel)]onwin32
Type"right","credits"or"license()"formoreinformation.
>>>i=8
>>>print[iforiinrange(5)]
[0,1,2,3,4]
>>>printi
#按照道理来讲for循环中的i与最外面的i=8的i是不同的,但是这里。。。。。
>>>
2)
i=6
print([iforiinrange(5)])#结果为[0,1,2,3,4]
print(i)#结果i=6
'''
#6、a=input('请输入:')#这里不再需要一个有效的表达式,他的用法和raw_input相同
#print(a)
#7、range和dict的变化
'''
1、在python2中,range火xrange会创建一个列表。常出现在for循环、字典、列表中,但是py3中xrange改名为range,在python3中使用
使用xrange会触发错误。同时range返回的是可迭代对象而不再是列表形式,要想使range的结果得到一个list数据必须要使用list(range(5))
2、字典内的dict.iterkeys(),dict.itervalues(),dict.iteritems()被keys()andvalues()anditems()所替代
他们的返回结果类似于集的可迭代对象,而不是键值对的列表。从而在不进行键和值条目复制的情况下就能对其执行set操作
'''
a=range(6)
print(a)#result:range(0,6)对象,不是列表
print(list(a))#result:[0,1,2,3,4,5]
foriinrange(6):
print(i)
#print(xrange(5))#报错:提示为name"xrange"is'notdefined
#dict案例
d={'name':"iaodeng",'sex':28}
print(d.items())
print(type(d.items()))#<class'dict_items'>
#返回结果dict_items([('name','iaodeng'),('sex',28)])
#这里不再是列表形式
'''
Python2.7.10(default,May232015,09:40:32)[MSCv.150032bit(Intel)]onwin32
Type"right","credits"or"license()"formoreinformation.
>>>d={'name':"iaodeng",'sex':28}
>>>printd
{'name':'iaodeng','sex':28}
>>>printd.items()
[('name','iaodeng'),('sex',28)]
>>>printd.iteritems()#返回一个可迭代对象
<dictionary->
>>>foriind.iteritems():printi
('name','iaodeng')
('sex',28)
>>>
'''
print('xiaodeng:d.keys():',d.keys())#xiaodeng:d.keys():dict_keys(['name','sex'])
print(type(d.keys()))#<class'dict_items'>
#values()同理
print("既然是可迭代对象,那么还可以进行下面操作")
foriind.items():
print(i)
forkeyind.keys():
print(key)
print("values用法同理")
print('用list将可迭代对象转化为list数据')
print(list(d.values()))
#7、python3具有单一的str类型,其类型相当于python2的unicode,python3所有的字符串都是unicode
#新增bytes类型
a=b"china"
print(type(a))#<class'bytes'>
#str和tytes对象都可以使用encode和decode来进行转化
s=a.decode()
print(s)#china字符串类型
s=s.encode()
print(s)#b"china",tytes字节类型
#8、输入和输出
a=open('test.txt','w')
a.write("writeinsomething")
a.close()
b=open("test.txt","r")
print(b.read())#note:注意加括号
"""
1、如果要对文本执行任何I/O操作,python3会强制用户使用文本模式,打开文件,如果不想使用默认编码utf-8
通常需要指明所需的编码
2、如果对二进制数据进行I/O操作,必须使用二进制模式打开文件或进行读写操作
eg:
f=open("test1.txt","wb+")#二进制追加模式
f.write(b"wlovefengmei")#必须加b,以bytes对象的形式进行写入
f.close()
file=open(filename,mode)
mode:
r:只读模式
w:只写,如果文件已存在则会进行覆盖操作,所以格外小心,如果文件不存在则创建新的文件
a:打开文件用于追加,只写如果文件不存在则创建
b:二进制,不能单独使用
经过演变会有很多形式
"""
#9、迭代器
"""
1、range在python3中返回颗迭代对象二不是列表,最大限度节约内存
2、zip(),map(),filter(),key(),value()返回的均是可迭代对象
"""
#10、异常错误处理
"""
1、必须使用关键词as,try和exceptNameErrorase语句
2、案例:
python2
try:
something
exceptNameError,err:
printerr
python3
try:
something
exceptNameErroraserr:
print(err)
3、raise触发语法用法的变化,python3只接受带括号的
1)raiseIOError,"fileerror"#出现语法错误
2)raiseIOError("fileerror")
"""
#11、面向对象
"""
1、需要单独深入学习
"""
#12、模块的变动
5. python三本经典书籍都是什么
python三本经典书籍有:《深度学习入门:基于Python的理论与实现》,《Python高性能(第2版)》,《Python科学计算最佳实践:SciPy指南》。
1、《深度学习入门:基于Python的理论与实现》
本书深入浅出地剖析了深度学习的原理和相关技术,使用Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学习网络,使读者在此过程中逐步理解深度学习。
本书结合大量代码实例,详尽展示了SciPy的强大科学计算能力,包括用NumPy和SciPy进行分位数标准化,用Ndimage实现图像区域网络、频率与快速傅里叶变换,用稀疏坐标矩阵实现列联表、SciPy中的线性代数、SciPy中的函数优化等。
Python标准库的主要功能有:
文本处理,包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能。
文件处理,包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能。
操作系统功能,包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、写日记(logging)等功能。
6. python工具有哪些
第一款:最强终端 Upterm
它是一个全平台的终端,可以说是终端里的IDE,有着强大的自动补全功能,之前的名字叫作:BlackWindow。有人跟他说这个名字不利于社区推广,改名叫Upterm之后现在已经17000+Star了。
第二款:交互式解释器 PtPython
一个交互式的Python解释器,支持语法高亮、提示,甚至是VIM和emacs的键入模式。
第三款:包管理必备 Anaconda
强烈推荐:Anaconda。它能帮你安装许多麻烦的东西,包括:Python环境、pip包管理工具、常用的库、配置好环境路径等等。这些小事情小白自己一个个去做的话,容易遇到各种问题,也容易造成挫败感。如果你想用Python搞数据方面的事情,安装它就可以了,它甚至开发了一套JIT的解释器Numba。所以Anaconda有了JIT之后,对线上科学计算效率要求比较高的东西也可以搞定了。
第四款:编辑器 Sublime3
如果你是小白的话,推荐从PyCharm开始上手,但是有时候写一些轻量的小脚本,就会想到轻量级一点的工具。Sublime3很多地方都有了极大的提升,并且用起来比原来还要简单,配合安装Anaconda或CodeIntel插件,可以让Sublime3拥有近乎IDE的体验。
第五款:前端在线编辑器 CodeSandbox
虽然这个不算是真正意义上的Python开发工具,但如果后端工程师想要写前端的话,这个在线编辑器太方便了,节省了后端工程师的生命。不用安装npm的几千个包了,它已经在云端完成了,才让你直接就可以上手写代码、看效果。对于React、Vue这些主流前端框架都支持。
第六款:Python Tutor
Python
Tutor是一个免费教育工具,可帮助学生攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。通过这个工具,教师或学生可以直接在web浏览器中编写Python代码,并逐步可视化地运行程序。
第七款:IPython
如何进行交互式编程?没错,就是通过IPython。IPython相对于Python自带的shell要好用的多,并且能够支持代码缩进、TAB键补全代码等功能。如果进行交互式编程,这是不可缺少的工具。
第八款:Jupyter Notebook
Jupyter
Notebook就像一个草稿本,能将文本注释、数学方程、代码和可视化内容全部组合到一个易于共享的文档中,以Web页面的方式展示,它是数据分析、机器学习的必备工具。
第九款:Pycharm
Pycharm是程序员常常使用的开发工具,简单、易用,并且能够设置不同的主题模式,根据自己的喜好来设置代码风格。
第十款:Python Tutor
这个工具可能对初学者比较有用,而对于中高级程序员则用处较少。这个工具的特色是能够清楚的理解每一行代码是如何在计算机中执行的,中高级程序员一般通过分步调试可以实现类似的功能。这个工具对于最初接触Python、最初来学习编程的同学还是非常有用的,初学者可以体验一下。
7. python3 lambda表达式函数
lambda你可以理解为一个函数生成器,他返回的是一个函数,比如你代码中的lambda x:x%n意思就是返回一个函数,这个函数的作用是算X%n的值.所以返回的return bk之后,bk成了一个函数这个函数接收一个参数X
我也刚学到这卡了,网上找的这个理解起来比较舒服一点
下面是自己总结的,运行也能成功。答案也是对的。。
_not_divisible(n)返回值是一个函数,这个函数接收一个(X)参数
_not_divisible(n)(X)
8. python2和python3的区别,转换及共存
python2和python3的区别
1.性能
Py3.0运行 pystone benchmark的速度比Py2.5慢30%。Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好的优化结果。
Py3.1性能比Py2.5慢15%,还有很大的提升空间。
2.编码
Py3.X源码文件默认使用utf-8编码,这就使得以下代码是合法的:
>>> 中国 = 'china'
>>>print(中国)
china
3. 语法
1)去除了<>,全部改用!=
在Python 2里,为了得到一个任意对象的字符串表示,有一种把对象包装在反引号里(比如`x`)的特殊语法。在Python 3里,这种能力仍然存在,但是你不能再使用反引号获得这种字符串表示了。你需要使用全局函数repr()。
Notes
Python 2
Python 3
①
`x` repr(x)
②
`'PapayaWhip' + `2`` repr('PapayaWhip'+repr(2))
Note:x可以是任何东西—一个类,函数,模块,基本数据类型,等等。repr()函数可以使用任何类型的参数。
2)去除``,全部改用repr()
3)关键词加入as 和with,还有True,False,None
4)整型除法返回浮点数,要得到整型结果,请使用//
由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。
所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from __future__ import division来使用Python 3的除法)。
Python 2
print'3/2=',3/2print'3//2=',3//2print'3/2.0=',3/2.0print'3//2.0=',3//2.0
3/2=13//2=13/2.0=1.53//2.0=1.0
默认,如果两个操作数都是整数,Python 2 自动执行整型计算。
Python 3
print('3/2=',3/2)print('3//2=',3//2)print('3/2.0=',3/2.0)print('3//2.0=',3//2.0)
3/2=1.53//2=13/2.0=1.53//2.0=1.0
Note: 需要注意的是“双划线”(//)操作符将一直执行整除,而不管操作数的类型,这就是为什么 5.0//2.0 值为 2.0。Python 3 中,/ 操作符是做浮点除法,而 // 是做整除(即商没有余数,比如 10 // 3 其结果就为 3,余数会被截除掉,而 (-7) // 3 的结果却是 -3。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 操作符一样。
5)加入nonlocal语句。使用noclocal x可以直接指派外围(非全局)变量
6)print
去除print语句,加入print()函数实现相同的功能。同样的还有 exec语句,已经改为exec()函数
在Python 2里,print是一个语句。无论你想输出什么,只要将它们放在print关键字后边就可以。
Python 3里,print()是一个函数。就像其他的函数一样,print()需要你将想要输出的东西作为参数传给它。
例如:
2.X: print "The answer is", 2*2
3.X: print("The answer is", 2*2)
2.X: print x, # 使用逗号结尾禁止换行
3.X: print(x, end=" ") # 使用空格代替换行
在Python 2里,如果你使用一个逗号(,)作为print语句的结尾,它将会用空格分隔输出的结果,然后在输出一个尾随的空格(trailing space),而不输出回车(carriage return)。在Python 3里,通过把end=' '作为一个关键字参数传给print()可以实现同样的效果。参数end的默认值为'
',所以通过重新指定end参数的值,可以取消在末尾输出回车符。
2.X: print # 输出新行
3.X: print() # 输出新行
2.X: print >>sys.stderr, "fatal error"
3.X: print("fatal error", file=sys.stderr)
在Python 2里,你可以通过使用>>pipe_name语法,把输出重定向到一个管道,比如sys.stderr。在Python 3里,你可以通过将管道作为关键字参数file的值传递给print()来完成同样的功能。参数file的默认值为std.stdout,所以重新指定它的值将会使print()输出到一个另外一个管道。
2.X: print (x, y) # 输出repr((x, y))
3.X: print((x, y)) # 不同于print(x, y)!
exec语句
exec()函数使用一个包含任意Python代码的字符串作为参数,然后就像执行语句或者表达式一样执行它。exec()跟eval()是相似的,但是exec()更加强大并更具有技巧性。eval()函数只能执行单独一条表达式,但是exec()能够执行多条语句,导入(import),函数声明—实际上整个Python程序的字符串表示也可以。
Notes
Python 2
Python 3
①
execcodeString exec(codeString)
②
execcodeStringina_global_namespace exec(codeString,a_global_namespace)
③
execcodeStringina_global_namespace,a_local_namespace exec(codeString,a_global_namespace,a_local_namespace)
在最简单的形式下,因为exec()现在是一个函数,而不是语句,2to3会把这个字符串形式的代码用括号围起来。
Python 2里的exec语句可以指定名字空间,代码将在这个由全局对象组成的私有空间里执行。Python 3也有这样的功能;你只需要把这个名字空间作为第二个参数传递给exec()函数。
更加神奇的是,Python 2里的exec语句还可以指定一个本地名字空间(比如一个函数里声明的变量)。在Python 3里,exec()函数也有这样的功能。
execfile语句
就像以前的exec语句,Python 2里的execfile语句也可以像执行Python代码那样使用字符串。不同的是exec使用字符串,而execfile则使用文件。在Python 3里,execfile语句已经被去掉了。如果你真的想要执行一个文件里的Python代码(但是你不想导入它),你可以通过打开这个文件,读取它的内容,然后调用compile()全局函数强制Python解释器编译代码,然后调用新的exec()函数。
Notes
Python 2
Python 3
7)输入函数改变了,删除了raw_input,用input代替: Python 2有两个全局函数,用来在命令行请求用户输入。第一个叫做input(),它等待用户输入一个Python表达式(然后返回结果)。第二个叫做raw_input(),用户输入什么它就返回什么。这让初学者非常困惑,并且这被广泛地看作是Python语言的一个“肉赘”(wart)。Python 3通过重命名raw_input()为input(),从而切掉了这个肉赘,所以现在的input()就像每个人最初期待的那样工作。
2.X:guess = int(raw_input('Enter an integer : ')) # 读取键盘输入的方法
3.X:guess = int(input('Enter an integer : '))
Note:如果你真的想要请求用户输入一个Python表达式,计算结果,可以通过调用input()函数然后把返回值传递给eval()。
I/O方法xreadlines()
在Python 2里,文件对象有一个xreadlines()方法,它返回一个迭代器,一次读取文件的一行。这在for循环中尤其有用。事实上,后来的Python 2版本给文件对象本身添加了这样的功能。
在Python 3里,xreadlines()方法不再可用了。2to3可以解决简单的情况,但是一些边缘案例则需要人工介入。
Notes
Python 2
Python 3
①
②
如果你以前调用没有参数的xreadlines(),2to3会把它转换成文件对象本身。在Python 3里,这种转换后的代码可以完成前同样的工作:一次读取文件的一行,然后执行for循环的循环体。
如果你以前使用一个参数(每次读取的行数)调用xreadlines(),2to3不能为你完成从Python 2到Python 3的转换,你的代码会以这样的方式失败:AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'。你可以手工的把xreadlines()改成readlines()以使代码能在Python 3下工作。(readline()方法在Python 3里返回迭代器,所以它跟Python 2里的xreadlines()效率是不相上下的。)
8)改变了顺序操作符的行为,例如x<y,当x和y类型不匹配时抛出TypeError而不是返回随即的 bool值
9)去除元组参数解包。不能def(a, (b, c)):pass这样定义函数了
10)新式的8进制字变量,相应地修改了oct()函数。
2.X的方式如下:
>>> 0666
438
>>> oct(438)
'0666'
3.X这样:
>>> 0666
SyntaxError: invalid token (<pyshell#63>, line 1)
>>> 0o666
438
>>> oct(438)
'0o666'
11)增加了 2进制字面量和bin()函数
>>> bin(438)
'0b110110110'
>>> _438 = '0b110110110'
>>> _438
'0b110110110'
12)扩展的可迭代解包。在Py3.X 里,a, b, *rest = seq和 *rest, a = seq都是合法的,只要求两点:rest是list对象和seq是可迭代的。
13)新的super(),可以不再给super()传参数,
>>> class C(object):
def __init__(self, a):
print('C', a)
>>> class D(C):
def __init(self, a):
super().__init__(a) # 无参数调用super()
>>> D(8)
C 8
<__main__.D object at 0x00D7ED90>
14)支持class decorator。用法与函数decorator一样:
>>> def foo(cls_a):
def print_func(self):
print('Hello, world!')
cls_a.print = print_func
return cls_a
>>> @foo
class C(object):
pass
>>> C().print()
Hello, world!
class decorator可以用来玩玩狸猫换太子的大把戏。更多请参阅PEP 3129
4. 字符串和字节串
Python 2有两种字符串类型:Unicode字符串和非Unicode字符串。Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。
而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。Python 3只有一种类型:Unicode字符串(Unicode strings)。只有str一种类型,但它跟2.x版本的unicode几乎一样。
Notes
Python 2
Python 3
①
②
Python 2里的Unicode字符串在Python 3里即普通字符串,因为在Python 3里字符串总是Unicode形式的。
Unicode原始字符串(raw string)(使用这种字符串,Python不会自动转义反斜线"")也被替换为普通的字符串,因为在Python 3里,所有原始字符串都是以Unicode编码的。
全局函数unicode()
Python 2有两个全局函数可以把对象强制转换成字符串:unicode()把对象转换成Unicode字符串,还有str()把对象转换为非Unicode字符串。
Python 3只有一种字符串类型,Unicode字符串,所以str()函数即可完成所有的功能。(unicode()函数在Python 3里不再存在了。)
Notes
Python 2
Python 3
5.数据类型
1)Python 2有为非浮点数准备的int和long类型。int类型的最大值不能超过sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。
在Python 3里,只有一种整数类型int,大多数情况下,它很像Python 2里的长整型。
Note:检查一个变量是否是整型,获得它的数据类型,并与一个int类型(不是long)的作比较。你也可以使用isinstance()函数来检查数据类型;再强调一次,使用int,而不是long,来检查整数类型。
sys.maxint
由于长整型和整型被整合在一起了,sys.maxint常量不再精确。但是因为这个值对于检测特定平台的能力还是有用处的,所以它被Python 3保留,并且重命名为sys.maxsize。
Notes
Python 2
Python 3
①
②