Python学习之语法学习

  • A+
所属分类:Python

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
* 两个数相乘或是返回一个被重复若干次的字符串 3得到6。'la' 3得到'lalala'
** 返回x的y次幂 * 4得到81(即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

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: