今天的内容主要是学习Python之前的一些不同于其他语言的基础,来吧,我们一起
一、Python简要
- 特性
- Python是一门动态语言(这点和Swift类似),声明变量的时候,我们只需要赋值即可,不需要关心数据类型,Python会自动的判断其数据类型
- Python没有其他语言的
{}
标记代码块,使用:
+Tab
缩进方式表示代码块
- 交换两个变量的值
- 在一般的语言中交换两个变量的值需要3条语句,而在Python中一条语句即可完成
a = 1 b = 2 # 交换 a, b = b, a
- 在一般的语言中交换两个变量的值需要3条语句,而在Python中一条语句即可完成
- 获取变量的类型
type(<variable>)
- Python的集合:分为List(使用
[]
表示),Set/Dictionary(使用{}
表示),Tuple(使用()
表示) - 模块的导入
- 要使用一些系统之外的包中的函数,就需要导入包,使用关键字
import
来导入
- 要使用一些系统之外的包中的函数,就需要导入包,使用关键字
二、Python数据类型
- Python数据类型分类
- 功能划分:
- 基本类型:数字、布尔值、字符串
- 容器类型:列表、元组、字典、集合、自定义
- 性质划分:
- 可变类型:列表、字典、集合、自定义
- 不可变类型:数字、布尔值、字符串、元组、不可变集合
- 功能划分:
- 详细说明
-
数字:
- 分类:整数(int,包含各种进制,科学计数法)、浮点数(float)、复数(complex)
- Python中的数字可以表示任意长度的数字
- 复数的表示:
<num1> +/- <num2>j
,<num1>
表示这个复数的实部real
,<num2>
表示这个复数的虚部imag
; - 整数的进制表示:
0b
开头表示二进制,0o
开头表示八进制,0x
开头表示十六进制; - 科学计数法表示:
<num1>e<num2>
表示<num1>
的<num2>
次方;
-
字符串:
- 注意点
- Python中的所有字符串都是Unicode类型的
- Python中国的字符串既可以使用
"
,也可以使用'
,但是需要成对出现; - Python把字符串分为单行字符串和多行字符串,单行的就是使用
"
或'
表示,多行字符串用"""
或'''
表示; - 单行字符串可以使用换行显示的方式使得代码更好看,下面的表示为使用换行显示的方式展示单行字符串(还有一种方式就是使用反斜杠的方式,这种常见于编写脚本的方式,了解即可):
v1 = ("你真漂亮\(◎o◎)/!," "我都害羞了( ^ω^)" "我不知道该说什么" "有蓝盆友吗?")
v2 = "你真漂亮\(◎o◎)/!," \ "我都害羞了( ^ω^)" \ "我不知道该说什么" \ "有蓝盆友吗?"
- 常用方法:
-
split([<spliter>[,<split-times>]])
:默认按照空格分割,传入分割符后按照分割符分割;<split-times>表示分割的次数,默认是有多少就分割多少连续的空格当作一个处理; -
rsplit([<spliter>[,<split-times>]])
:和split一样都是用来使用分隔符分割字符串的,不同的是从右侧开始分割,但是只有在<split-times>指定小于实际分隔符的情况下才生效; -
join(<collection>)
:这个方法是用来把一个集合使用this字符串连接成一个字符串的方法,即使用规则<spliter-string>.join(<collection>)
; -
relace(<source>, <target>[, <replace-times>])
:把this的<source>替换成<target>,生成一个新的字符串。<replace-times>用来指定从左边开始替换几个; -
upper()
:把this的每个英文字符搜编程大写; -
lower()
:把this的每个英文字符搜编程小写; -
strip()
:类似其他语言的trim方法,去掉字符串开始和结束的空格换行等字符。响应的lstrip就是去除左边的空格,rstrip就是取出右边的空格;
-
- 字符串的格式化:
- 使用
+
连接的方式,注意的是不同类型之间不能直接使用+
连接,需要先把数据转化成字符串后再进行+
; - 使用
{}
占位符的形式,类似于C语言中的格式化,不同的是没有C语言中的那些%c
,%g
等,取而代之的就是简单的{}
"welcome {}, you stand here for {} hours!".format("Ugly龙", 5); "Welcome {name}, you stand here for {hour} hours!".format(name="Ugly龙", hour=5);
- 使用
- 其他的用法
- 数字转化为字符串:
str(<num>)
- 数字转化为各个进制字符串:
bin(<num>)
,oct(<num>)
- 字符串转整数:
int("<num>")
- 字符串转浮点数:
float("<num>")
- 获得字符的ASCII码:
ord("<character>")
- 获得ASCII码的字符:
chr(<ascii-code>)
- 数字转化为字符串:
-
补充:经常看见别人的代码在字符串前面添加
r
,b
等,补充一下:-
u/U:表示unicode字符串
- 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码。一般英文字符在使用各种编码下, 基本都可以正常解析, 所以一般不带u;但是中文, 必须表明所需编码, 否则一旦编码转换就会出现乱码。 建议所有编码方式采用utf8
-
r/R:非转义的原始字符串
- 与普通字符相比,其他相对特殊的字符,其中可能包含转义字符,即那些,反斜杠加上对应字母,表示对应的特殊含义的,比如最常见的”\n”表示换行,”\t”表示Tab等。而如果是以r开头,那么说明后面的字符,都是普通的字符了,即如果是“\n”那么表示一个反斜杠字符,一个字母n,而不是表示换行了。以r开头的字符,常用于正则表达式,对应着re模块。
-
b:bytes
- python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b”“前缀代表的就是bytes;python2.x里, b前缀没什么具体意义, 只是为了兼容python3.x的这种写法
-
- 注意点
-
列表:
- 列表的初始化:
empty_list = []
nums = [1, 2, 3]
- 常用函数:
- 查看列表的长度:
len(<list>)
- 访问:下标的方式:
nums[0]
,支持负索引,即从后向前取 - 切片:获取列表的一个子集,
[[<start-index>] : [<end-index>][<step>]]
,这个区间是一个前闭后开的区间,step表示每隔几个取一个值;(注:最外面的[]
是必须的,和我个人的记法优点冲突,后面慢慢改进) - 判断从属关系:
<element> [not] in <list>
,表示判断<element>是不是[不]在<list>中 -
<list>.count(<element>)
,表示<element>在<list>中出现多少次; -
<list>.index(<element>)
,表示查询<element>在<list>中第一次出现的索引; -
<list>.append(<element>)
,表示把<element>插入到<list>中最后的位置,<element>可以是任何的元素; -
<list>.insert(<index>, <element>)
,向<index>位置插入元素; -
del <list>[<index>]
,删除<list>中index位置的元素; -
<list>.pop(<index>)
,删除<list>中index位置的元素,<index>也可以是负数,默认是最后一个; -
<list>.remove(<element>)
,删除<list>中的<element>元素; -
<list>.sort([reverse=True/False])
,根据ASCII编码进行排序; -
<list>.reverse()
,倒序; -
<list>.extend(<element>)
,把<element>
差分成单个的字符,每个字符作为<list>
的一个元素;
- 查看列表的长度:
- 列表的初始化:
-
元组:
- 元组和列表非常相似,只不过元组是不可变的,而列表是可变的;需要注意的是当我们生成一个单个元素的元组的时候不能这样写:
t = (1)
,这样写的话,解释器会把它解释成一个单独的数字1,可以在这个数字的后面添加一个逗号来区别,添加逗号后甚至都可以不去写圆括号了 - 元组支持多变量一起赋值:
num1, num2 = 1, 2
- 相同元素个数的列表可以赋值给元组
- 元组的速度比列表快,可用下面的代码进行比较:
%timeit -n <run-times> <code>
- 元组和列表非常相似,只不过元组是不可变的,而列表是可变的;需要注意的是当我们生成一个单个元素的元组的时候不能这样写:
-
字典:
- 注意:
- 字典只能通过key去获取值,不能通过索引获取
- 字典的key只能是不可变的元素如数字,元组等,但是不能是浮点值
- 初始化
{}
kvs = {1: 2, 2: 3, 3: 4}
- 常用方法
-
<dict>.get(<key>[, <default-value>])
,当不存在的时候不会报错,而<dict>[<key>]
在不存在的时候会报错; -
<dict>.keys()
,返回所有键; -
<dict>.values()
,返回所有值; -
<dict>.items()
,返回所有键值对; -
<dict>.popitem()
,移除并返回一个键值对,; -
<dict>.has_key(<key>)
,<dict>中是否有这个<key>
; -
<dict1>.update(<dict2>)
,使用新的字典<dict2>
更新<dict1>
,如果<dict2>
中的元素没有在<dict1>
中,那么就把<dict2>
中的这个元素添加到<dict1>
中,如果存在那就根据<dict2>
中的这个元素的值来更新<dict1>
;需要注意的是,这个方法要求比较多,如key
必须是一个sequence
;
-
- 注意:
-
集合(无序列表):
- 注意:
- 集合中的元素只能是不可变的元素如数字,元组等,但是不能是浮点值
- 如果集合a是集合b的子集,那么集合a和b之间可以使用比较运算符来比较
- 初始化:
aSet = set()
- 常用方法:
-
<set1>.issupperset(<set2>)
,<set1>是不是<set2>的超集 -
<set1>.issubset(<set2>)
,<set1>是不是<set2>的子集 -
<set>.add(<element>)
:向<set>中添加元素 -
<set>.pop([<element>])
:把<set>中首个元素弹出 -
frozenset(<list>)
,创建一个不可变的集合,不常用,可以用来作为字典的key使用
-
- 注意:
-
三、Python数据运算
- 数字运算
- 整除:
13 // 6
为2
- 幂次运算:
power(3, 10, 5)
,表示3的10次方模以5的结果 - 除法运算:
divmod(15, 7)
→(2, 1)
,前一个数字是除法结果,后一个数字是余数 - 近似运算:
round(3.1415, 2)
→3.14
,表示保留几位小数
- 整除:
- 字符串运算
- 字符串和一个数字相乘,表示把这个字符串输出几次,列表和元组与一个数字相乘,表示把这个里诶包或者元组的元素重复多少次合并成一个新的列表或者元组
- 列表和元组的加法就是把两个列表或者元组合并
- 集合运算
-
<set1> & <set2>
,求两个集合的交集 -
<set1> | <set2>
,求两个集合的并集 -
<set1> - <set2>
,求在集合<set1>但是不再<set2>中的元素
-
- 逻辑运算
-
and
:如果都为真,返回最后一个True的值,有一个为False,那么就返回这个为False的值 -
or
:返回第一个为true的值,如果都为False,那么返回最后一个值;
-
三、Python赋值机制
-
id(<variable>)
,获取变量<variable>
的内存地址 -
<variable1> is <variable2>
,判断<variable1>
和<variable2>
是不是指向同一块内存地址;
四、Python中变量的命名:
- object #公用方法
- _object #半保护
#被看作是“protect”,意思是只有类对象和子类对象自己能访问到这些变量,
在模块或类外不可以使用,不能用’from module import *’导入。
#__object 是为了避免与子类的方法名称冲突, 对于该标识符描述的方法,父
类的方法不能轻易地被子类的方法覆盖,他们的名字实际上是
_classname__methodname。 - _ _ object #全私有,全保护
#私有成员“private”,意思是只有类对象自己能访问,连子类对象也不能访
问到这个数据,不能用’from module import *’导入。 - _ _ object_ _ #内建方法,用户不要这样定义
查阅:
- 实现输入密码的时候不显示的特效
- 文字闪烁效果,固定闪烁的次数
- 是否能自动把数据格式化成表格的形式显示