Python 学习开篇
前言
最近看到一张图,有点意思:

蓝色是(成长+付出),红色是回报。有多久可以达到这个红心,要看我们自已的努力,付出了多少专注与汗水。我想说的是,水平轴并不是时间,如果不能坚持努力,可能永远都到不了那个红心。
背景
最近领导说,之前写了一两个月的 shell 脚本要全部改成 Python 脚本。给我们周五一天时间学习 Python 语法,然后下个周一要投入到工作中。没办法,周末豁出去了。好在 Android 开发,需要用到的 Python 知识点不是太多,加上有面向对象思想的概念,学习起来难度不算十分大。本文主要记录一下 Python 的一些需要注意的语法知识。
Python 运行方式
安装完Python环境之后,运行 Python 的方式主要有:
- 打开控制台,执行
python,出现如下界面:

出现提示符>>>就表示已经在python 交互环境之中了,接下
来就可以输入python语句并执行了。

输入exit()退出Python交互环境。
- 新建文件,将文件保存后缀为 .py ,然后在控制台中输入 python xxx.py

执行结果如下:

两种方式的区别:在交互式环境下,输入python语句,立即执行。运行Python文件,实际上是将多条语句一次性全部执行。
Python 变量与常量
Python与java不同,定义变量不需要指明变量的明确类型,甚至都不需要像 JavaScript 那样用 Var 来声明。比如定义一个 Str 类型的'name' 变量,并初始化为 'sharpcj',像下面这样就可以了:
name = sharpcj
Python 会根据你的赋值自动判断变量的类型。
Python 中定义常量,把变量名全部大写,但是这样的变量依然可以改变其值。所以,Python 没有严格意义上的常量,这只是一种约定俗成的规范。
Python 模块和包
引入模块
所谓的模块,就类似是 java 中的类,我们不可能把所有的代码都写在一个文件里吧,使用模块最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。举个例子:编写一个程序,等待 3 秒,这是我们可以引入 time 模块,然后调用 time 的 sleep 方法。
文件内容如下:

我们通过 import time引入 time 包,执行结果是,先输出 hello,world!,等待 3 秒之后,再输出Welcome to Python!,如果不引入 time 包,则会报如下错误:

包
如果不同的人编写的模块名相同怎么办?为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package),说白了,就是将同名的模块放在不同的目录下面,这还没完,还需要在该目录下面建__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是mycompany。
目录可以有多层,引入的时类似from dir1.dir2.xxx import xxx的语句。
Python 的面向对象
在Python中,通过 class定义类。 例如定义类 student,

类名通常是大写开头的单词,紧接着是(object),表示该类是从哪个类继承下来的,继承的概念我们后面再讲,通常,如果没有合适的继承类,就使用object类,Python 中所有的类最终都会继承自 object 类。
Python中定义方法用 def 关键字。__init__ 是一个特殊的方法,可以绑定属性。如:
class Student(object) :
def __init__(self, name, age) :
self.name = name
self.score = age
__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在 __init__ 方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
有了 __init__ 方法,在创建实例的时候,就不能传入空的参数了,必须传入与 __init__ 方法匹配的参数,但self不需要传,Python解释器自己会把实例变量传进去:
stu = Student ('sharpcj',25)
如果要让内部属性不被外部访问,只需把属性的名称以两个下划线__开头命名,在Python中,实例的变量名如果以__开头,就变成了一个私有变量,只有内部可以访问,外部不能访问。外部要访问,则添加相应的方法即可。
class Student(object) :
def __init__(self, name, age):
self.__name = name
self.__age = age
def get_name(self):
return self.__name
def get_age(self):
return self.__age
def set_name(self, name):
self.__name = name
def set_score(self, age):
self.__age = age
在Python中,变量名类似 __xxx__ 的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用 __name__ 、 __age__ 这样的变量名。
有些时候,你会看到以一个下划线开头的实例变量名,比如 _name ,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
双下划线开头的实例变量是不是一定不能从外部访问呢?其实也不是。不能直接访问__name是因为Python解释器对外把 __name变 量改成了 _Student__name,所以,仍然可以通过 _Student__name 来访问 __name 变量。
Python 学习开篇的更多相关文章
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python学习日记(一):拜见小主——Python
近日学习Python,特将学习过程及一点心得记录于此. 由于之前做过一个Java爬虫的项目,虽然很长时间没有碰过爬虫,但是小郭同学有一颗不死的爬虫心,哈哈.最近在互联网上找一些电影的时候,有很多电影只 ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- python学习笔记-python程序运行
小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...
- Python学习记录day6
title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...
- Python学习记录day5
title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...
随机推荐
- 1. 初识 Lucene
在学习Lucene之前呢,我们当然首先要了解下什么是Lucene. 0x01 什么是Lucene ? Lucene是一套用于全文检索和搜索的开放源代码程序库,由Apache软件基金会支持和提供. Lu ...
- DevOps实践之Jenkins安装部署
Prerequisites Minimum hardware requirements: 256 MB of RAM 1 GB of drive space (although 10 GB is a ...
- spring框架学习笔记4:SpringAOP实现原理
AOP AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善.OOP引入 ...
- Beta阶段敏捷冲刺报告-DAY5
Beta阶段敏捷冲刺报告-DAY5 Scrum Meeting 敏捷开发日期 2017.11.6 会议时间 12:00 会议地点 软工所 参会人员 全体成员 会议内容 乱序问题的解决,异常输入提示 讨 ...
- 【iOS】OC-AFNetworking 2.0 跟踪文件上传进度
我是较新的 AFNetworking 2.0.使用下面的代码片段,我已经能够成功地将一张照片上传到我的 url.我想要跟踪的增量上载进度,但我找不到这样做 2.0 版的示例.我的应用程序是 iOS 7 ...
- mycat入门_介绍与安装
利用闲暇时间接触了下mycat. 一.介绍 1.概述: 国内最活跃的.性能最好的开源数据库中间件,可以理解为数据库和应用层之间的一个代理组件. 2.作用: 读写分离.分表分库.主从切换. 3.原理: ...
- Java KeyTool command
Create a new key: keytool -genkey -alias keyAlias -keyalg RSA -validity 1000 -keystore d:\keyPath\k ...
- 阿里云API网关(11)外网访问 阿里云API网关内定义的API步骤:
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
- GIT入门笔记(13)- GUI GIT
- 阿里云API网关(2)开放 API 并接入 API 网关
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...