前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Python】从C++/Java到Python入门(3)

【Python】从C++/Java到Python入门(3)

作者头像
ZifengHuang
发布2020-07-29 15:41:45
6700
发布2020-07-29 15:41:45
举报
文章被收录于专栏:未竟东方白

那么昨天写完了基础的部分,这篇就是同样是Python的基础部分的其他部分了,在说面向对象的类和对象前,要先说一下Python的变量作用域设计。

作用域

1.首先,在Python的作用域共有四种,简称为LEGB规律,分别为:

  • L (Local) 局部作用域
  • E (Enclosing) 闭包函数中
  • G (Global) 全局作用域
  • B (Built-in) 内建作用域

2.称为LEGB规律,顾名思义,系统会按照LEGB的顺序查找未定义的变量,这点其实和其他语言是差不多的

3.既然规律与其他语言差不多,生成域的方法也是和其他的差不多

4.值得注意的是由于我们在函数内(局部作用域)新建的变量是局部作用域的变量,如果我们想要在函数内调用闭包函数(E)的变量的话,需要使用关键词nonlocal 函数名 先声明一下变量。且要注意类似这样的声明只能进行一次(无论是局部声明还是闭包声明,都不能冲突)

5.类似的,想要调用全局变量的话需要使用关键词global 函数名 来声明变量,也不能和同名冲突,可以看下面的几个例子

6.默认的同名变量的调用顺序

7.当加入了nonlocal关键词声明后就可以修改调用闭包的变量了:

8.相似地可以利用global来调用修改全局变量:

类与对象

1.和C与Java类似,都是使用class来定义新的类,但是类名后面可以加上括号写参数,参数代表的是要继承的父类。

2.Python支持多重继承。

3.Python类内的函数(称作方法)也有访问控制,只有三种类型:公有的(相当于public),私有的(相当于private),专有的(可以重写但不能新建的专有函数,类的构造函数,类型转换接口等属于这一类)

4.类内的函数默认是公有的,写法就是正常地def函数即可,但是Python需要每个函数在声明的时候写入专用的参数self,这个参数相当于this指针(也确实可以写成this)显式写出来了。函数内部可以利用这个参数相当于自身的对象来调用内部的变量或函数什么的。不过在外部调用的时候并不需要写入这个参数。

5.对于私有函数及变量,Python的写法是在名字上做手脚,所有名字前面有两个下划线(__)的函数或变量都视作私有的。

6.而对于专有的函数及变量则是在前面有两条下划线末尾也有两条下划线,例如初始化函数__init__(),不过个人觉得这种写法并不算好看。在类中实现这些函数就可以完成重写。

7.类的专有方法是写死的,只有那么几种。其中我认为常用的有构造函数(在新建对象时调用)__init__();析构函数(在del时调用)__del__();比较接口(大于小于的重写)__cmp__();加法接口(加号时调用)__add__()...详细的网上也有很多资料。

输入与输出

1.Python的控制台输入使用的是函数input(),控制台输出使用的是print()

2.input和print都可以带上字符串参数作为提示信息输出

3.如第一篇【Python】从C++/Java到Python入门(1)中字符串小节提到的,print可以利用%完成格式化输出。不过由于Python致力于消解数据类型的差距,并没有设置类似于格式化输入scanf的函数。

4.真正所需的格式化输入输出可以利用正则表达式来实现(说不定会写一下)

5.Python还有一种格式化字符串的方法,str.format(x1,x2...)。这种写法比第三点提到的方法更新,更推荐使用。具体的使用方法很简单,在前面的str字符串中预留大括号({}),然后format的参数就会按照顺序替换字符串中的大括号了,这么写还能自动进行类型转换,很方便。

6.还有一点一定要注意,print的内容默认以字符串来处理,所以如果想要对输出的内容进行计算要记得先进行类型转换,计算完成后再转换为字符串

文件

1.Python的文件操作整体来说更接近于C的风格而不是Java的流风格。

2.类似于C,打开一个文件使用的是open(filename,mode)。同样,关于文件的打开模式,有读(r),写(w),追加(a)三种模式。每种模式又都有其加强版r+,w+,a+,加强版的用途都是使功能读写均可的用途。

3.w和r的区别主要在w可以对文件进行创建和覆盖,而a和w的区别又在于a是开始于文件末尾的,可以创建文件但不会覆盖文件,所以叫追加模式。

4.而读取的函数有read(),readline(),readlines(),三个函数各有不同:read会返回文件的全部内容,可以带入一个正参数指定要读取的字节数;readline返回文件的一行,并使文件的内部指下移一行;readlines以列表的形式返回文件的全部行的内容。返回为空时代表以达到末尾。

5.相比之下,写入有一个write(),可以写入任意的字符串并使指针后移和一个写入列表用的writelines()。

6.同样类似C,可以使用seek()函数进行指针跳转,用tell()函数返回当前指针的位置,用next()函数读取下一行(用于做循环读取的判断),还有flush()函数刷新读写缓冲区。

7.和C与Java一样,文件使用完要调用close()。不过当文件变量被指向其他文件时,原来的文件也会被自动调用close()。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 未竟东方白 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档