- A+
FROM:http://www.jianshu.com/p/1031edbbff2e
每个语言都有自己独特的语法
数据类型
python支持以下几种基本数据类型:整数、浮点数、字符串、布尔、空值;另外还有类似对象的类型list(数组)、tuple(元组)、dict(Map)、set(集合)
基本数据类型
整数和浮点数
>>> a=1>>> b=1.1
上面,a是整数,b是浮点数,整数与浮点数计算结果为浮点数。
字符串
严格来说,字符串算是一种对象类型,但和java一样字符串是一种不可变对象类型。
和js一样,字符串是使用单引号或双引号括起来的任意文本,字符串之前用“+”号链接可以拼接字符串,如下:
>>> a='我是一个字符串'>>> b="我也是一个字符串">>> c="\n我用了一个换行符号">>> a+b+c'我是一个字符串我也是一个字符串\n我用了一个换行符号'>>> print(a+b+c) 我是一个字符串我也是一个字符串 我用了一个换行符号
print()用于打印字符串
“…”符号用于代替换行,提高可读性。。。
>>> a='''line1... line2... line3'''>>> a'line1\nline2\nline3'
ord()和chr()函数
ord函数用来显示一个字符的ascii码,chr函数用来将ascii码转为字符。
>>> ord('e')101>>> chr(101)'e'>>> ord('ee') #参数只能是一个字符,否则会抛出如下异常Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: ord() expected a character, but string of length 2 found
使用占位符格式化
python的格式化方法c语言几乎一样,我总是记不住,网上抄一个吧
格式 | 描述 |
---|---|
%% | 百分号标记 |
%c | 字符及其ASCII码 |
%s | 字符串 |
%d | 有符号整数(十进制) |
%u | 无符号整数(十进制) |
%o | 无符号整数(八进制) |
%x | 无符号整数(十六进制) |
%X | 无符号整数(十六进制大写字符) |
%e | 浮点数字(科学计数法) |
%E | 浮点数字(科学计数法,用E代替e) |
%f | 浮点数字(用小数点符号) |
%g | 浮点数字(根据值的大小采用%e或%f) |
%G | 浮点数字(类似于%g) |
%p | 指针(用十六进制打印值的内存地址) |
%n | 存储输出字符的数量放进参数列表的下一个变量中 |
>>> a="我的名字叫%s,我今年%d岁了">>> print(a % ('john', 31)) 我的名字叫john,我今年31岁了
bytes
bytes算是一种独立的数据类型,但它与字符串类型一般分不开
encode()函数可以将字符串转换为对应字符集的bytes
>>> a='我是一个字符串'>>> b=b'我是一个字符串' File "<stdin>", line 1SyntaxError: bytes can only contain ASCII literal characters.>>> b=b'hello world'>>> print(b)b'hello world'>>> a.encode('utf-8')b'\xe6\x88\x91\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe5\xad\x97\xe7\xac\xa6\xe4\xb8\xb2'
布尔
True和False,注意大小写
空值
None相当于java的null,注意大小写
数组(list)
python初始一个数组的方式和js很像
>>> array_1=['aa','bb','cc']>>> array_2=[11,22,33]>>> array_3=['aa',11,'cc']>>> empty_array=[]>>> len(empty_array)0
len()函数可以获得数组的长度,和java一样,数组的下标也是从0开始的,超过下标范围也会报数组越界
但数组的下标可以是负数,表示从后往前的顺序
>>> array_1[0]'aa'>>> array_2[3] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range>>> array_2[-1]33>>> array_2[-2]22
append()、insert()、pop()
append(element)函数是在数组末尾追加元素
insert(index, element)是在指定的位置插入元素
pop(index)是删除指定位置的元素,如果不指定index,则删除末尾的元素
>>> array_1 ['aa', 'bb', 'cc']>>> array_1.append('dd')>>> array_1 ['aa', 'bb', 'cc', 'dd']>>> array_1.insert(2,'ff')>>> array_1 ['aa', 'bb', 'ff', 'cc', 'dd']>>> array_1.pop()'dd'>>> array_1 ['aa', 'bb', 'ff', 'cc']>>> array_1.pop(1)'bb'>>> array_1 ['aa', 'ff', 'cc']
元组(tuple)
元组一种初始化后就不能修改的数组,初始化时用"("和")"表示
>>> t=(1111,'bbbb',array_1) # 元组的三个元素在初始化时就确定了,但你可以通过修改array_1变量的值来变相地修改元组t的值>>> print(t) (1111, 'bbbb', ['aa', 'ff', 'cc'])
字典(dict)
字典类型有些类似与java中的map,是一种key-value的数据结构
>>> dict={"aa":33432, "bb": "I'm a string", "cc":"dddd"} # 初始化一个dict变量>>> dict["aa"] # 如何访问dict中的值33432>>> dict["bb"]"I'm a string">>> dict["dd"] # 如果key不存在,会抛出异常Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'dd'>>> "dd" in dict # 判断一个key是否存在False>>> "aa" in dictTrue>>> print (dict.get("dd")) # 使用get方法,不取不存在的key,返回NoneNone>>> print (dict.get("dd", "I got nothing")) # get函数的第二个参数表示,如果返回None则用第二个参数代替I got nothing>>> dict["dd"] = "ddddddd" # 往dict里添加一个值,如果有相同的key,则覆盖原来的值>>> dict.get("dd")'ddddddd'>>> dict {'dd': 'ddddddd', 'cc': 'dddd', 'aa': 33432, 'bb': "I'm a string"}>>> dict.pop("dd") # pop方法从dict中删除一个key'ddddddd'>>> dict {'cc': 'dddd', 'aa': 33432, 'bb': "I'm a string"} >>>
set
set可以认为是一个值不能重复的数组
>>> s = set([1, 1, 2, 2, 3, 3])>>> s {1, 2, 3}>>> s2 = set([1,"33",dict]) # set的值里不能放不可HASH的数据类型Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'dict'>>> s2 = set([1,"33",3.44])>>> s2 {1, 3.44, '33'}
变量
命名方式,只能使用大小写英、数字和"_"组合,不能以数字开头
另外,python是大小写敏感的语言,因此要注意大小写。
与java不同,python是动态语言,在声明一个变量时,不需要指定变量的数据类型,这一点和js一样。
控制流语句
条件判断
python做条件判断的关键字是"if"、"elif"、"else"
if <条件判断1>: <执行1>elif <条件判断2>: <执行2>elif <条件判断3>: <执行3>else: <执行4>
判断条件可以直接是一个变量,只要这个变量是非零数值、非空字符串、非空list等,就判断为True,否则为False
循环
循环有两种写法一种是for...in,一种是while
for主要用于遍历一个数组之类的结构,else部分为可选,在循环执行完成后执行
>>> for ele in array_1:... print(ele)... else... print("over!") aa ff cc over!
while则是只要满足条件,就不断循环,条件不满足时退出
>>> n = 0>>> sum = 0>>> while n <= 100:... sum=sum+n... n=n+1...>>> print(sum)5050
break语句用来终止循环
contine用来路过本次循环中的剩余部分
代码缩进
代码缩进是难以接受的python一个特性,代码块不是用{}括起来,而是通过缩进。。。看上面while的例子,第4、5行必须在前面加上一个Tab,否则不在循环体中执行。如此简洁的设计是为啥??
运算符
四则运算
最简单和常用的,需要记牢
运算符 | 名称 | 说明 | 举例 |
---|---|---|---|
+ | 加 | 两个对象相加 | 3 + 5得到8。'a' + 'b'得到'ab' |
- | 减 | 两个数相减 | -5.2得到一个负数。50 - 24得到26 |
* | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 | 2 3得到6。'la' 3得到'lalala' |
** | 幂 | 返回x的y次幂 | 3 * 4得到81(即3 3 3 3) |
/ | 除 | x除以y | 4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333 |
// | 取整除 | 返回商的整数部分 | 4 // 3.0得到1.0 |
% | 取模 | 返回除法的余数 | 8%3得到2。-25.5%2.25得到1.5 |
条件运算符
这也都是程序中常用的
运算符 | 名称 | 说明 |
---|---|---|
<、<= | 小于、小于等于 | 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 |
>、>= | 大于、大于 等于 | 返回x是否大于y |
== | 等于 | 比较对象是否相等 |
!= | 不等于 | 比较两个对象是否不相等 |
not、and、or | 布尔“非”、 “与”、 “或” | 如果x为True,not x返回False、如果y为False,x and y返回False,x or y 返回 True |
位运算
这种不会就算了,会就要精通,否则等于不会
运算符 | 名称 | 说明 | 举例 |
---|---|---|---|
<< | 左移 | 把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1) | 2 << 2得到8——2按比特表示为10 |
>> | 右移 | 把一个数的比特向右移一定数目 | 11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5 |
& | 按位与 | 数的按位与 | 5 & 3得到1 |
竖线 | 按位或 | 数的按位或 | 5 竖线 3得到7 |
^ | 按位异或 | 数的按位异或 | 5 ^ 3得到6 |
~ | 按位翻转 | x的按位翻转是-(x+1) | ~5得到6 |
函数
定义函数
python 定义一个函数的语法如下
>>> def 函数名称 (参数列表...) :>>> 代码块
参数
函数的参数列表可以有多个,在定义时可以给参数添加默认值
>>> def func( a, b=100, c='str' ) :... print ( "a=[%s], b=[%d], c=%s" % (a, b, c) )... return None # return None相当于没有return,也可以return其它类型
调用函数时,可以不传参数,也可以指定参数
>>> func( "hello" ) # 只传参数a,b、c用者是默认值a=[hello], b=[100], c=str>>> func() # 什么参数都没传,a不能为空Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: func() missing 1 required positional argument: 'a'>>> func( "hello", c="world" ) # 指定了参数c,这时就无所谓参数列表的顺序了a=[hello], b=[100], c=world>>> func( "hello", c="world", b=25 ) # 这个例子也用来说明,指定参数列表调用方式a=[hello], b=[25], c=world
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫