设为首页 收藏本站
查看: 815|回复: 0

[经验分享] Python 3 与Python 2的区别

[复制链接]

尚未签到

发表于 2017-4-22 09:15:41 | 显示全部楼层 |阅读模式
  Python 2.x 与3.x 最本质的区别是什么
  不是从2.7出现3.1,是从2.6。2.7是为了让Python平稳过度到3.X而发布的版本,加入了一些3.X的特性。主要区别有(个人观点,你可以到官方看它的说法)
没有了经典类,全是新型类,就是class对象没有父类,那么就是从object继承而来的;
print、exec从语句改为函数;
还有就是str改为了unicode,就相当于2.X的unicode对象,2.X的str改为了bytes(这个要方便得多了,不像2.X要是编码出错,很不爽的).
  正在阅读最新版的《A byte of Python》。发现Python3.0在某些地方还是有些改变的。准备慢慢的体会,与老版本的《A byte of Python》做对比,最后再去查阅官方网站的文档。
  1. 如果你下载的是最新版的Python,就会发现所有书中的Hello World例子将不再正确。
  Old: print "Hello World!" #打印字符串
New: print("Hello World!")
  在v3.x中用old方法,则会抛出异常:SyntaxError: invalid syntax
将字符串放到括号中print出来,这种写法对于我这种学习Java出身的人来说,很是亲切啊:)
  2.
Old: guess = int(raw_input('Enter an integer : ')) #读取键盘输入的方法
New: guess = int(input('Enter an integer : '))
方法名变得更加容易记!
  3. 加入了一个新的nonlocal statement,非局部变量,它的范围介于global和local之间,主要用于函数嵌套,用法如下:
  #!/usr/bin/python
  # Filename: func_nonlocal.py
  def func_outer():
    x = 2
    print('x is', x)
    def func_inner():
        nonlocal x
        x = 5
    func_inner()
  print('Changed local x to', x)
  func_outer()
  4. VarArgs parameters,不知道这个翻译成什么比较妥当?先看例子:
  #!/usr/bin/python
  # Filename: total.py
  def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count
  print(total(10, 1, 2, 3, vegetables=50, fruits=100))
  当在参数前面使用*标识的时候,所有的位置参数(1,2,3)作为一个list传递。
当在参数前面使用**标识的时候,所有的关键参数(vegetables=50, fruits=100)作为一个dictionary传递。
  5. 关于Packages的话题,暂时没看懂。。。
  6. 在数据结构中,多了一种类型:set
  Set是一种无序的简单对象的集合,当我们关心一个对象是否在一个集合中存在,而顺序和出现的次数是次要的时候,可以使用set。
  7. 关于os.sep方法,(set是separator,分隔符的缩写)
  一个很晕菜的例子:
  Old:
target_dir = '/mnt/e/backup/'
target = target_dir + time.strftime('%Y%m%d%H%M%S') + '.zip'
  New:
target_dir = 'E:\\Backup'
target = target_dir + os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'
  os.sep的功能是自动辨别操作系统,给出不同的分隔符,Windows上是\\,Linux上是/,原理我是明白了,功能也很不错,但是作者的例子。。。。只有一处使用了os.sep,其他的地方还是老的写法啊(E:\\)
  8. 可以使用@修饰符声明一个类方法:
  @classmethod
  def howMany(klass):
        '''Prints the current population.'''
        print('We have {0:d} robots.'.format(Robot.population))
  9. 可以将以个类用Metaclasses的方式声明为抽象类抽象方法
  from abc import *
  class SchoolMember(metaclass=ABCMeta):
  '''Represents any school member.'''
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print('(Initialized SchoolMember: {0})'.format(self.name))
    @abstractmethod
    def tell(self):
        '''Tell my details.'''
print('Name:"{0}" Age:"{1}"'.format(self.name, self.age), end=" ")
  #pass
  10. 文件读写的模式又增加了两种:文本本件('t')二进制文件('b')。
  11.将打开文件的操作放到使用with语句修饰的方法中,书上说好处是让我们更专注于文件操作,让代码看起来不凌乱,我一时间还不能体会with的好处,希望大家指点。
  #!/usr/bin/python
  # Filename: using_with.py
  from contextlib import context
@contextmanager
def opened(filename, mode="r")
    f = open(filename, mode)
    try:
        yield f
    finally:
        f.close()
with opened("poem.txt") as f:
    for line in f:
        print(line, end='')
  12.python3.0中添加了logging module,给我的感觉类似于Java中的log4j,直接看代码:
  import os, platform, logging
if platform.platform().startswith('Windows'):
logging_file = os.path.join(os.getenv('HOMEDRIVE'),
os.getenv('HOMEPATH'), 'test.log')
else:
    logging_file = os.path.join(os.getenv('HOME'), 'test.log')
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s : %(levelname)s : %(message)s',
    filename = logging_file,
    filemode = 'w',
)
  logging.debug("Start of the program")
logging.info("Doing something")
logging.warning("Dying now")
  教程:
  0、下载:http://python.org/getit/
  1、http://www.360doc.com/content/11/0303/23/2126067_97919930.shtml
  2、http://www.cnitblog.com/yunshichen/archive/2009/04/01/55924.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-367585-1-1.html 上篇帖子: python使用前的基础知识 下篇帖子: python相关拾零
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表