《python程序设计》之读书笔记
对于python还是一头雾水,干脆去借了一本书看。
Part 1 基础语法
1.1 标识符 保留字 变量
标识符——我们为变量、函数、类、模块以及对象所取的名称,用于被识别。
*包括字母、下划线和数字,首字符不能是数字。不能有空格。有大小写之分
*在python3中,非ASCII标识符被允许使用。关键字不能当做标识符。
保留字——就是关键字。可以用以下命令查看:
import keyword
keyword.kwlist
结果:['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
变量——可以直接声明变量名称,不必声明变量类型(python会自动判断)
*python的语法很自由,赋值给变量,输入的时候,直接变量名或print都行
>>> x=1
>>> x
1
>>> print(x)
1
*还可以直接在解释器中做运算:(加减乘除都行)
*我测试了一下,就算被除数不是浮点数,整除还是默认为float形式,除不尽的话,小数点后是十六位。(虽然我并不清楚为什么是十六位_(:з」∠)_)当然,这个时候的符号是“/”
>>> 1+4
5
>>> 8-9
-1
>>> 3*2
6
>>> 6/3
2.0
>>> 7/2
3.5
>>> 7/3
2.3333333333333335
*后来不小心多打了一个“/”,发现了一个神奇的现象:
>>> 1/2
0.5
>>> 1//2
0
>>> 2/3
0.6666666666666666
>>> 2//3
0
*上网搜了一下,发现这个叫(也是蛮好玩的叫法)
地板除
从Python2.2开始,增加了一个操作符 // ,以执行地板除://除法不管操作数为何种数值类型,总是会舍去小数部分,返回数字序列中比真正的商小的最接近的数字。
*就是直接去小数位(ˇˍˇ) 我差一点和除余符号弄混了。所以我又测试了一下“%”。
>>> 8//5
1
>>> 8%5
3
*当然,这个“//”符号也有整除变成int型的效果。(当然我不知道是不是int型,就顺便测试了一下,结果发现type()这个函数真的有用,还有我之前的猜测是正确的,有点好玩\(^o^)/~)
>>> x=8//5
>>> print(x)
1
>>> type(x)
<class 'int'>
>>> x=8%5
>>> x
3
>>> type(x)
<class 'int'>
>>> x=2/3
>>> x
0.6666666666666666
>>> type(x)
<class 'float'>
*最后总结:当我们在解释器中输入了一个变量,python会记住这个变量的值。python中的变量不需要声明,(它的类型会随着用户的需要动态变化)它没有类型,这里的“类型”是变量所指的内存中对象的类型。但是每个变量在使用前必须赋值。等号用来给变量赋值(左变量右存储值)。变量赋值之后该变量才会被创建。创建变量的时候没有赋值,就不能在之后调用。强行调用,会显示错误类型:NameError 变量没有定义。
python允许用户同时为多个变量赋值。比如,创建一个整型对象,值都为4,那么这三个变量被分配到相同的内存空间上。并且,用户可以同时为多个对象指定不同的变量值,这些变量的类型可以不同。
*但有一点令我疑惑的是,输出的时候,若想同时输出abc三个值,那么变量与变量之间必须用逗号隔开。且当加入的三个变量均为字符串时,则单独输出某一变量也是字符串的形式,有引号。直接输出a,b,c的话,输出的形式似乎是字符串组成的列表形式,有括号。但是用print的话, 就是直接将文本输出。
>>> a=b=c=4
>>> print(a,b,c)
4 4 4
>>> a,b,c="山无棱","天地和","乃敢与君绝"
>>> print(a,b,c)
山无棱 天地和 乃敢与君绝
>>> a="山无棱"
>>> b="天地和"
>>> c="乃敢与君绝"
>>> a,b,c
('山无棱', '天地和', '乃敢与君绝')
>>> a
'山无棱'
>>> b
'天地和'
>>> c
'乃敢与君绝'
>>> a=17
>>> b=23
>>> c='hahaha'
>>> a
17
>>> b
23
>>> c
'hahaha'
>>> print(a,b,c)
17 23 hahaha
>>> a,b,c
(17, 23, 'hahaha')
1.2 程序结构
❤换行
只要记住!!\r——回车 return的意思 \n——换行 newline的意思 (虽然我一直都没用过 \r ,不是有回车键么)
以下是计算机的不同操作系统接收到符号的操作过程理解:
Dos和windows采用换行符 ASCII CR LF(return+linefeed)=回车+换行
UNIX/Linux采用换行符ASCII LF(linefeed)换行
苹果机(MAC OS系统)采用换行符ASCII CR(return)回车
CR用符号 '\r' 表示, 十进制ASCII代码是13,八进制代码是15, 十六进制代码为0x0D
LF用符号 '\n' 表示, 十进制ASCII代码是10, 八进制代码是12,十六进制代码为0x0A
所以Windows平台上换行在文本文件中是使用 0d 0a 两个字节表示, 而UNIX和苹果平台上换行则是使用0a或0d一个字节表示.
一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件.
在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错.
很多文本/代码编辑器带有换行符转换功能, 使用这个功能可以将文本文件中的换行符在不同格式单互换.
在不同平台间使用FTP软件传送文件时, 在ascii文本模式传输模式下, 一些FTP客户端程序会自动对换行格式进行转换. 经过这种传输的文件字节数可能会发生变化. 如果你不想ftp修改原文件, 可以使用bin模式(二进制模式)传输文本.
(说实话这一段没怎么看懂,以后回来再看看_(:з」∠)_)
>>> print("Hello world\nNice to meet you")
Hello world
Nice to meet you
❤程序代码超过一行
如果想写的代码一行写不完(例如有多个判断条件等等),我们可以在每一行的结尾加上反斜杠“ \ ”。相当于续写的功能,这样你就能继续下一行。这与C/C++的语法相同。(当然在每一行末尾的反斜杠之后,不加注释文字)
>>> print("在故事的最后尽头,\
... 有我陪着你,一起老去。")
在故事的最后尽头,有我陪着你,一起老去。
特别注意:如果是以小括号(),中括号[ ],大括号{ }包含起来的语句,不必使用反斜杠,就可以直接分成数行。
>>> month_name=["Januari","Februari","Maart",
... 'April','Mei','Juni',
... 'Juli','Augustus','September',
...'Oktober','November','December']
>>> print(month_name)
['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'JuliAugustus', 'September', 'Oktober', 'November', 'December']
❤将数行表达式写成一行
在每一行的末尾加上分号(;),将数行排列在一行即可。
>>> x=4;y=9;z=8
>>> x
4
>>> y
9
>>> z
8
❤注释
python中的注释有单行注释和多行注释单行直接用#来表示 多行用三个单引号或三个双引号表示
>>> #这是一行注释
... print("也许这是让我们输出命令行")
也许这是让我们输出命令行
>>> '''
... 我有一个美丽的梦想
... 长大之后要播种太阳
... 啦啦啦啊嘿黑猫警长
... '''
'\n我有一个美丽的梦想\n长大之后要播种太阳\n啦啦啦啊嘿黑猫警长\n'
>>> '''
... 不应该啊为什么会输出
... '''
'\n不应该啊为什么会输出\n'
>>> """
... 可能这个python还是有点问题
... 要不然怎么会把注释重新输出
... """
'\n可能这个python还是有点问题\n要不然怎么会把注释重新输出\n'
>>> """夭寿啦
...
... print("见鬼了")
...
... """
'夭寿啦\n\nprint("见鬼了")\n\n'
*奇怪的地方就是,在cmd中运行python,多行注释好像并没有用,他会重新输出一遍你的注释内容,而且是将多行变一行,中间空了一行就用 \n 代替。只不过在三个单引号或三个双引号之间,输入的命令函数是无效的。(真是让我很一言难尽) 但是在eclipse中运行python,这样的多行注释是可行的。(算了我们不用纠结这么多)
1.3 数据类型
有6个标准的数据类型。Number(数字)、String(字符串)、Sets(集合)、List(列表)、Tuple(元组)、Dictionary(字典)。
(1)Number 数字
python3支持四种数字类型:int(整数)、float(浮点数)、bool(布尔值)、complex(复数)
特别注意!!python2 中没有bool(布尔值),它用数字0表示False,数字1表示True。在python3中,它把True和False定义成了关键字,但它们值还是1和0,而且可以和数字相加。
>>> #int整数
... a=3421895403
>>> a
3421895403
>>> #可以用十六进制数值来表示整数,其表示方法就是在数字前加上0x,例如:
... a=0x16
>>> a
22
>>> #float浮点数
... #浮点数的表示方法可用小数点形式,也可以用指数形式。指数符号可以用字母e或E,这里的e/E就相当于10
... #指数前可以使用+/-符号,也可以在指数数值前加上数值0或在整数前也可以加上0
...a,b,c,d,e,f,g=3.14,10.,.001,1e100,3.14E-10,1e010,08.1
>>> a
3.14
>>> b
10.0
>>> c
0.001
>>> d
1e+100
>>> e
3.14e-10
>>> f
10000000000.0
>>> g
8.1
然后我发现一个神奇的事情,bool值可以直接做加减法(当成数字使用)
>>> #bool 布尔值
... #可用符号 == 判断两边是否绝对相等
... #python中的布尔值包括True和False,分别和1和0对应。
... True==1
True
>>> True==0
False
>>> True==5
False
>>> True-1==0
True
>>> False==0
True
>>> False+1==True
True
>>> #complex 复数
... #复数的表示法是使用双精度浮点数来表示实数与虚数的部分,复数的符号用j或J代替。
... a=b=c=d=1.5+0.5j,1J,2+1e100j,3.14e-10j
>>> a
((1.5+0.5j), 1j, (2+1e+100j), 3.14e-10j)
>>> a,b,c,d=1.5+0.5j,1J,2+1e100j,3.14e-10j
>>> a
(1.5+0.5j)
>>> b
1j
>>> c
(2+1e+100j)
>>> d
3.14e-10j
>>> e
3.14e-10
>>> a=b=c=d=3.14
>>> b
3.14
可以用real和imag属性分别读出复数的实部和虚部,同样,可以用complex(real,imag)函数,将real与imag两个数值转换成复数。real参数是复数的实数部分,imag参数是复数的虚数部分。
>>> a=1.5+0.5j
>>> a
(1.5+0.5j)
>>> a.real
1.5
>>> a.imag
0.5
>>> complex(2,2.5)
(2+2.5j)
❤同样,数值之间可以通过运算符进行运算操作。除了基本的加减乘除(包括 // 地板除),还有取余 % ,乘方 ** (某某的多少次方)
>>> 9%3
0
>>> 2**2
4
>>> 2*3
6
在数字运算中,要注意一下几点:
数值的除法(/)总是返回一个浮点数,要获取整数使用(//)操作符。
整数和浮点数混合计算时,python会把整数转换成浮点数。
数值之间可以进行比较,但是复数不能比较。
用户可以将数值使用在函数内。(在此拓展一个函数:round())
round(number,digits) Round函数返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。
number,要四舍五入的数,digits是要小数点后保留的位数
如果digits 大于 0,则四舍五入到指定的小数位。 如果 digits 小于 0,则在小数点左侧进行四舍五入。
如果 digits 等于 0,则四舍五入到最接近的整数。 如果round函数只有参数number,等同于digits 等于 0。
>>> round(3.1415926535,3)
3.142
之前我们也了解过,内置的type()函数可以用来查询变量所指的对象类型。
>>> a,b,c,d=5,5.2,True,5+0.2j
>>> type(a)
<class 'int'>
>>> print(type(a),type(b),type(c),type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
>>> type(a),type(b),type(c),type(d)
(<class 'int'>, <class 'float'>, <class 'bool'>, <class 'complex'>)
用户还可以将数值做位移动(shifting)或是屏蔽(masking):【没明白就查了一下】
Python位运算符
按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:
下表中变量 a 为 60,b 为 13,二进制格式如下:
a = 0011 1100b = 0000 1101-----------------a&b = 0000 1100a|b = 0011 1101a^b = 0011 0001~a = 1100 0011
运算符 | 描述 | 实例 |
---|---|---|
& | 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 | (a & b) 输出结果 12 ,二进制解释: 0000 1100 |
| | 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。 | (a | b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符:当两对应的二进位相异时,结果为1 | (a ^ b) 输出结果 49 ,二进制解释: 0011 0001 |
~ | 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。 |
<< | 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
这里又要说一下 原码 反码 补码(这里是二进制表示)
若数为正,则符号位是0,原码=反码=补码
若数为负,则符号位是1,反码与原码一一相反,补码=反码+1
>>> 16<<2 #0001 0000 → 0100 0000
64
... 30 & 0x1B #0001 1110 & 0001 1011 → 0001 1010
26
... 2|5 #0010|0101 → 0111
7
... 3^5 #0011 0101 → 0110
6
... ~2 #0010 → 1101(-8+4+1=-3)
-3
《python程序设计》之读书笔记相关推荐
- 《大话移动APP测试Android与iOS》之读书笔记
首先我是初入测试行业的小白,和大家一样我也是在百度上搜软件测试书籍,其中就有这样的一版本书推荐,我也是被它的标题吸引了,因为我本身也比较喜欢看大话
- 《大话移动APP测试:Android与iOS应用测试指南》
<大话移动app测试:android与ios应用测试指南> 基本信息 作者: 陈晔 出版社:清华大学出版社 ISBN:9787302368793 上架时间:2014-7-7 出版日期:20 ...
- 《大话移动 APP 测试》
<大话移动 APP 测试> wiki: Software testing 第5章 常用工具介绍和实践 Android.iOS Monkey Android SDK 提供的一个工具:发送伪随 ...
- APP软件Android和iOS两个平台软件著作权需要分开登记吗?
APP软件Android和iOS两个平台需要分开登记吗? APP软件的不同平台可以登记一个软件著作权,也可以按不同的平台分别登记软件著作权.当然也根据实际情况和公司需要而定. 如果APP软件的不同平台 ...
- Android群英传神兵利器读书笔记——第三章:Android Studio奇技淫巧
Android群英传神兵利器读书笔记--第三章:Android Studio奇技淫巧 这篇文章篇幅较长,可以使用版权声明下面的目录,找到感兴趣的进行阅读 目录 3.1 Android Studio使用 ...
- 《Android群英传》读书笔记---10.2(终篇)
<Android群英传>读书笔记-10.2 标签(): android中级 读书笔记 Activity过渡动画 曾经的 Android在Activity之间进行跳转的时候,只是非常生硬的切 ...
- Android群英传神兵利器读书笔记——第一章:程序员小窝——搭建高效的开发环境
Android群英传神兵利器读书笔记--第一章:程序员小窝--搭建高效的开发环境 目录 1.1 搭建高效的开发环境之操作系统 1.2 搭建开发环境之高效配置 基本环境配置 基本开发工具 1.3 搭建程 ...
- 《Android群英传》---读书笔记4
<Android群英传>-读书笔记4 标签: android中级 读书笔记 Android绘图机制与处理技巧 Android屏幕相关知识 略 2D绘图基础 系统通过提供的Canvans对象 ...
- 《Android群英传》---读书笔记6
<Android群英传>-读书笔记6 标签: android中级 读书笔记 Android 5.X SVG矢量动画机制 SVG:课可伸缩矢量图形:使用XML格式定义图形:图像在放大或改变尺 ...
- H5能取代移动app(Android和iOS)吗?
大量新生移动设备的兴起,改变了互联网的未来.在技术的发展上,HTML5会取代App应用吗?或者说能够在多大程度上取代呢?在HTML5规范中,已经加入了相机.磁力罗盘.GPS信息的支持.很多新兴浏览器也 ...
最新文章
- vue后台增删改查_Vue 原生实现商城购物车增删改查
- java:方法覆盖与方法重载
- 2019浙江省大学生网络与信息安全竞赛决赛部分WriteUp
- FusionCharts图表标题的参数设置
- 人工智能,装在罐子里
- 在gluster中配置distributed 卷
- [译] 在远程工作中领悟到的 10 件事
- requests 获取百度推广信息
- c++ array容器 传参_C/C++常用技巧及初学者易错点汇总学习
- 数据库考点之关系代数表达
- 计算机上缺少vsix安装程序,VSIX安装程序在Visual Studio 2017年(15.3)
- 关于字长、内存空间、地址总线、数据总线的理解
- dev-c++为什么使用调试时提示[error]ld returned 1 exit status?
- PCL中点云配准精通级实例解析
- Python进阶强化训练之字符串处理技巧
- 乐山计算机学校军训,心有多大,舞台就有多大!乐山这名中职学生考上双一流211重点大学...
- JavaScript实现移动端跟手轮播图
- 习语言(c语言)轻松入门教程
- R语言基础之第六部分 分类(史上最全含ddply、aggregate、split、by)
- pfx证书解析公钥私钥