每个语言都有自己独特的语法
数据类型
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 "", line 1, in
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 "", line 1
SyntaxError: 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 "", line 1, in
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 "", line 1, in
KeyError: 'dd'
>>> "dd" in dict # 判断一个key是否存在
False
>>> "aa" in dict
True
>>> print (dict.get("dd")) # 使用get方法,不取不存在的key,返回None
None
>>> 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 "", line 1, in
TypeError: unhashable type: 'dict'
>>> s2 = set([1,"33",3.44])
>>> s2
{1, 3.44, '33'}
变量
命名方式,只能使用大小写英、数字和"_"组合,不能以数字开头
另外,python是大小写敏感的语言,因此要注意大小写。
与java不同,python是�动态语言,在声明一个变量时,不需要指定变量的数据类型,这一点和js一样。
控制流语句
条件判断
python做条件判断的关键字是"if"、"elif"、"else"
if :
elif :
elif :
else:
判断条件可以直接是一个变量,只要这个变量是非零数值、非空字符串、非空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 "", line 1, in
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