python入门.docx
《python入门.docx》由会员分享,可在线阅读,更多相关《python入门.docx(30页珍藏版)》请在冰点文库上搜索。
python入门
python入门
1.词法分析
1.1注释(#)
注释使用#开头
1.2编码声明
如果第一行或者第二行的注释匹配coding[=:
]\s*([-\w.]+),则认为是编码声明,默认编码为UTF-8
推荐编码声明方式:
[python]viewplaincopy在CODE上查看代码片派生到我的代码片
#-*-coding:
-*-
1.3显示的行连接
当需要换行时,可以使用反斜线(\)连接上下两行,且反斜线后面不能添加注释
i.e
[python]viewplaincopy在CODE上查看代码片派生到我的代码片
#-*-coding:
UTF-8-*-
importsys
sys.stdout.write("hello陈\
fromPython%s\n"%(sys.version,))
1.4隐式的行连接
特殊情况下,如圆括号(()),方括号([]),或者大括号({})中的表达式可以分割成多个物理行而不需要反斜线。
此种换行方式下可以添加注解
i.e
[python]viewplaincopy在CODE上查看代码片派生到我的代码片
#-*-coding:
UTF-8-*-
importsys
sys.stdout.write("hello陈\
fromPython%s\n"%(sys.version
))
1.5关键字
以下的标识符被用作保留字,或者关键字(注意大小写):
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
Falseclassfinallyisreturn
Nonecontinueforlambdatry
Truedeffromnonlocalwhile
anddelglobalnotwith
aselififoryield
assertelseimportpass
breakexceptinraise
2.使用python解析器
打开cmd,输入py|python|python,即可打开交互模式。
i.e
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
$python
Python3.4.2(v3.4.2:
ab2c023a9432,Oct62014,22:
15:
05)[MSCv.160032bit(Intel)]onwin32
Type"help","copyright","credits"or"license"formoreinformation.
>>>flag=True
>>>ifflag:
...print("flagistrue!
")#注意缩进
...
flagistrue!
>>>
交互式输入复合语句时,最后必须跟随一个空行来表示结束(因为解析器无法猜测你什么时候已经输入最后一行)
3.简单介绍
3.1作为计算器使用
3.1数字
i.e
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>2+2
4
>>>5/2
2.5
>>>2**3
8
>>>4+_#交互模式下,最后一个打印的表达式分配给变量_,即8分配给_
12
>>>
3.2字符串
如果字符串中只有单引号而没有双引号,就用双引号引用,否则用单引号引用。
print()函数生成可读性更好的输出。
i.e
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>'"isn\'t",shesaid'
'"isn\'t",shesaid'
>>>print('"isn\'t",shesaid')
"isn't",shesaid
>>>print(r'"isn\'t",shesaid')#r保持原始字符串输出
"isn\'t",shesaid
>>>
字符串拼接
i.e
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>'py''thon'
'python'
>>>prefix='py'
>>>prefix+'thon'
'python'
>>>
字符串截取
i.e
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>word='helloeveryone'
>>>word[0]
'h'
>>>word[13]
'e'
>>>word[-1]#倒序从-1开始
'e'
>>>word[-2]
'n'
>>>word[0:
4]#包含头,不包含尾
'hell'
>>>word[0:
5]
'hello'
>>>word[:
5]#空代表从头开始
'hello'
>>>word[0:
]#空代表一直到结尾
'helloeveryone'
>>>word[:
]#显示所有字符
'helloeveryone'
>>>
字符串(Python)切割示意图:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
+---+---+---+---+---+---+
|P|y|t|h|o|n|
+---+---+---+---+---+---+
0123456
-6-5-4-3-2-1
Python中的字符串是不能改变的,如果你尝试改变会报错。
3.3列表
中括号中的一列用逗号分隔的值。
列表可以包含不同类型的元素,但是通常一个列表中的所有元素都拥有相同的类型。
i.e
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>words=[2,5,6,99]
>>>words
[2,5,6,99]
>>>words[-1]
99
>>>words+[111,222]
[2,5,6,99,111,222]
>>>words.append(333)#添加新元素
>>>words
[2,5,6,99,333]
>>>words[2:
3]=[555,666]#给切片赋值
>>>words
[2,5,555,666,99,333]
>>>len(words)#列表长度
6
>>>
列表可嵌套,创建包含其他列表的列表
i.e
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>a=[2,5,7]
>>>b=[3,6,8]
>>>c=[a,b]
>>>c
[[2,5,7],[3,6,8]]
>>>c[0]
[2,5,7]
>>>c[0][2]
7
>>>
输出斐波那契前几位
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>#输出斐波那契前几位
...a,b=0,1
>>>whileb<10:
...print(b)
...a,b=b,a+b
...
1
1
2
3
5
8
>>>
调整输出格式:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>#输出斐波那契前几位
...a,b=0,1
>>>whileb<10:
...print(b,end=',')
...a,b=b,a+b
...
1,1,2,3,5,8,>>>
4.流程控制语句:
ifwhilefor等属于复合语句
4.1if语句用于条件执行:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
if_stmt:
:
="if"expression":
"suite
("elif"expression":
"suite)*
["else"":
"suite]
i.e:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>x=int(input("enteraninteger:
"))
enteraninteger:
23
>>>ifx<0:
...print('<0')
...elifx==0:
...print('=0')
...else:
...print('>0')
...
>0
>>>
4.2while语句用于重复执行只要表达式为true
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
while_stmt:
:
="while"expression":
"suite
["else"":
"suite]
4.3for语句用于循环集合
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
for_stmt:
:
="for"target_list"in"expression_list":
"suite
["else"":
"suite]
i.e:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>animals=['cat','bird','elephant']
>>>foranimalinanimals:
...print(animal,len(animal))
...
cat3
bird4
elephant8
>>>
or
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>foriinrange(len(animals)):
...print(animals[i],len(animals[i]))
...
cat3
bird4
elephant8
>>>
4.4range()函数用于遍历数字序列
生成数字序列:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>foriinrange(5):
...print(i)
...
0
1
2
3
4
>>>
从2开始,到10之前结束,步长为2
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>foriinrange(2,10,2):
...print(i,end=',')
...
2,4,6,8,>>>
4.5breakcontinue
break:
跳出当前循环
i.e:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>forninrange(2,10):
...forminrange(2,n):
...ifn%m==0:
...print(n,'equals',m,'*',n//m)
...break
...else:
...print(n,'isaprimenumber')
...
2isaprimenumber
3isaprimenumber
4equals2*2
5isaprimenumber
6equals2*3
7isaprimenumber
8equals2*4
9equals3*3
>>>
continue:
继续执行下一次循环
4.6pass什么也不做
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>whileTrue:
...pass#一直等待直到手动停止(ctrl+c)
...
创建最小的类
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>classMyEmptyClass:
...pass
...
4.7定义函数(def)
使用def定义一个函数,其后必须跟有函数名和以括号标明的形式参数列表。
组成函数体的语句从下一行开始,且必须缩进
定义一个斐波那契函数:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>deffib(n):
...a,b=0,1
...whilea...print(a,end=',')
...a,b=b,a+b
...print()
...
>>>fib(3000)
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,
>>>
函数名重命名
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>fib
>>>f=fib
>>>f(3000)
0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,
>>>
不打印而保存在列表中返回
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>deffibR(n):
...result=[]#用以保存数据
...a,b=0,1
...whilea...result.append(a)
...a,b=b,a+b
...returnresult
...
>>>f100=fibR(100)
>>>f100
[0,1,1,2,3,5,8,13,21,34,55,89]
>>>
4.7.1默认参数值定义函数
在定义函数时,就已经对参数进行了赋值
i.e:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>o=5
>>>defaa(aa=o):
...print(aa)
...
>>>aa()
5
>>>o=6
>>>aa()
5
>>>
但是这在默认值是列表、字典或大部分类的实例等易变的对象的时候又有所不同。
例如,下面的函数在后续调用过程中会累积传给它的参数:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>deflist(a,l=[]):
...l.append(a)
...returnl
...
>>>print(list
(1))
[1]
>>>print(list
(2))
[1,2]
>>>print(list(3))
[1,2,3]
>>>
如果不需要共享,可以如下写法:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>deff(a,l=None):
...iflisNone:
...l=[]
...l.append(a)
...returnl
...
>>>print(f
(1))
[1]
>>>print(f
(2))
[2]
>>>
4.7.2关键字参数
参数:
当调用函数时,一个值被传递给函数(或者方法),这个值就叫做参数。
有两种类型的参数
★关键字参数(keywordargument):
在函数调用中,通过标识符指定参数;或者在**后通过字典传递参数
调用complex()函数:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
complex(real=3,imag=5)
complex(**{'real':
3,'imag':
5})
★位置参数(potionalargument):
以参数列表的形式出现或者通过*,
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
complex(3,5)
complex(*(3,5))
在函数调用中,关键字参数必须跟随在位置参数的后面
5.数据结构
5.1更多关于Lists
5.1.1作为栈使用
5.1.2作为队列使用
5.2del语句
移除列表中某个元素,清空列表等。
5.3Tuples(元组)和序列
元组由逗号分割的若干值组成。
元组是不可变的,元组是可嵌套的
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>t=12,43,'hello'
>>>t
(12,43,'hello')
>>>u=t,(2,5,'everyone')
>>>u
((12,43,'hello'),(2,5,'everyone'))
>>>t[0]
12
>>>t[0]=666
Traceback(mostrecentcalllast):
File"",line1,in
TypeError:
'tuple'objectdoesnotsupportitemassignment
>>>
构造包含0个和1个元素的元组
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>empty=()#构造包含0个元素的元组
>>>len(empty)
0
>>>singleton='hello',#构造包含1个元素的元组
>>>len(singleton)
1
>>>
5.4Sets(集合){}
特点:
不会重复,没有顺序,
可操作:
交集,并集,差
[java]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>basket={'egg','apple','egg','orange'}
>>>basket
{'egg','orange','apple'}
>>>'egg'inbasket
True
>>>'pear'inbasket
False
>>>a=set('aabccd')
>>>b=set('bbcdde')
>>>a
{'a','b','c','d'}
>>>b
{'b','d','c','e'}
>>>a-b#在a中不在b中
{'a'}
>>>a|b#在a中或在b中
{'b','a','e','d','c'}
>>>a&b#既在a中又在b中
{'b','d','c'}
>>>a^b#在a中或者b中,去除同时包含的
{'a','e'}
>>>
5.5字典
无序的键值对集合,键必须是唯一的
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>tel={'jack':
4098,'sape':
4139}
>>>tel['guido']=4127
>>>tel
{'sape':
4139,'guido':
4127,'jack':
4098}
>>>tel['jack']
4098
>>>deltel['sape']
>>>tel['irv']=4127
>>>tel
{'guido':
4127,'irv':
4127,'jack':
4098}
>>>list(tel.keys())
['irv','guido','jack']
>>>sorted(tel.keys())
['guido','irv','jack']
>>>'guido'intel
True
>>>'jack'notintel
False
dict()构造器根据键值对的序列创建字典
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>dict([('liming',2343),('zhangsan',5632)])
{'zhangsan':
5632,'liming':
2343}
>>>
还可以:
[plain]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>dict(sape=4139,guido=4127,jack=4098)
{'jack':
4098,'guido':
4127,'sape':
4139}
>>>{x:
x**2forxin(2,4,6)}
{2:
4,4:
16,6:
36}
>>>
5.6循环
循环字典的键和值,可以使用items()方法
i.e
[python]viewplaincopy在CODE上查看代码片派生到我的代码片
>>>tels={'bob':
4323,'jone':
8732,'lili':
1974}
>>>tels
{'jone':
8732,'bob':
4323,'lili':
1974}
>>>fork,vintels.items():
...print(k,v)
...
jone8732
bob4323
lili1974
>>>
循环序列的index和value,可以使用enumerate()方法
i.e
[python]viewplaincopy在CODE上查看代码片派生到我的代码片