python函数和模块有什么关键特性_Python学习----第一模块笔记(Python基础知识)...
1、python是什么?
python是動(dòng)態(tài)解釋型的強(qiáng)類型定義語言。
python官方版本的解釋器是CPython。該解釋器使用C語言開發(fā)。
當(dāng)前主要使用3.x版本的python。
2、第一個(gè)python程序
>>> print("Hello World!")
Hello World!
Linux下使用./xxx.py執(zhí)行python執(zhí)行python程序,在文件開頭添加如下代碼:
#!/usr/bin/env python
3、字符編碼
英文編碼系統(tǒng):ASCII,可以表示255個(gè)字符
中文編碼系統(tǒng):GB2312(1980,7445個(gè)字符)-->GBK1.0(1995,21886個(gè)字符,中文Windows默認(rèn)編碼)-->GB18030(2000)
Unicode:萬國(guó)碼,世界統(tǒng)一的一種編碼系統(tǒng)
UTF-8:Unicode的子集,對(duì)Unicode進(jìn)行優(yōu)化
python 3.x版本的默認(rèn)編碼是UTF-8。如需要定義程序文件的編碼在開頭添加# -*- coding: 字符編碼 -*-語句。
e.g:
#-*- coding: utf-8 -*-
4、變量
a = 1
#聲明一個(gè)變量,變量名a,值為1
定義變量的規(guī)則:
變量名只能是 字母、數(shù)字或下劃線的任意組合
變量名的第一個(gè)字符不能是數(shù)字
以下關(guān)鍵字不能聲明為變量名:
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
變量名最好能讓人明了該變量是用來做什么的
5、程序中的注釋
# 單行注釋 '''多行注釋''' or """多行注釋"""
6、用戶交互
input用來接收用戶的輸入
e.g:
>>> a = input("請(qǐng)輸入:")
請(qǐng)輸入:123
>>> print(a)123
注意:input默認(rèn)的數(shù)據(jù)類型為字符型,使用int()可以將其轉(zhuǎn)換為整型
使用type()可以查看變量的數(shù)據(jù)類型,e.g:
>>> a = "abc"
>>> print(type(a))
輸出小技巧:格式化輸出
e.g:
name = "Python"age= 28
print("Name is %s,Age is %s"%(name,age)) #%s字符串 %d 整數(shù) %f 浮點(diǎn)
print("Name is {_name},Age is {_age}".format(_name=name,_age=age))#結(jié)果
Name is Python,Age is 28Nameis Python,Age is 28
小技巧:密文輸入
需導(dǎo)入getpass模塊,使輸入的內(nèi)容不可見
e.g:
>>> getpass.getpass("請(qǐng)輸入密碼:")
請(qǐng)輸入密碼:#看不見我看不見我
'assdfghh'
7、if…else語句
if 條件: #如果
代碼塊else: #否則
代碼塊
if 條件: #如果
代碼塊elif 條件: #或者
代碼塊else: #否則
代碼塊
8、while循環(huán)
while條件:
代碼塊
#continue 跳出本次循環(huán),進(jìn)入下次循環(huán)
#break 結(jié)束整個(gè)循環(huán)
python中while可以搭配else使用,e.g:
a = 5
while a<6:if a/2 == 1:breaka+= 1
else:print("我就是else!")#結(jié)果
我就是else!
9、for循環(huán)
e.g:
for i in range(3):print(i)
i+= 1
#結(jié)果
0
1
2
for i in range(1,3):print(i)
i+= 1
#結(jié)果
1
2
for i in range(1,5,2):print(i)
i+= 1
#結(jié)果
1
3
for循環(huán)中也有continue和break方法
10、python中的模塊
Python有非常豐富和強(qiáng)大的標(biāo)準(zhǔn)庫和第三方庫
import 模塊
#程序開頭加上該代碼,加載某個(gè)模塊,接下去就可以使用該模塊提供的功能
11、python數(shù)據(jù)類型
數(shù)字:int(整型)、float(浮點(diǎn))、complex(復(fù)數(shù))
布爾值:True 、False
字符串:”Python”
12、python數(shù)據(jù)運(yùn)算
算術(shù)運(yùn)算
比較運(yùn)算
賦值運(yùn)算
按位運(yùn)算
邏輯運(yùn)算
成員運(yùn)算
身份運(yùn)算
運(yùn)算優(yōu)先級(jí)
三元運(yùn)算
e.g:
name = "Python"
if 1>0:
name= "Python"
else:
name= "JAVA"
print(name)#結(jié)果
Python
name= "Python"
if 1 ==0:
name= "Python"
else:
name= "JAVA"
print(name)#結(jié)果
JAVA
13、列表
列表是有序的,依靠下標(biāo)來取值。
>>> name = ["Python","JAVA","C++"]#定義一個(gè)列表
>>>name[0]'Python'
>>> name[1]'JAVA'
>>> name[-1]'C++'
>>> name[-2]'JAVA'
#通過列表的下標(biāo)來取值,下標(biāo)從0開始,負(fù)數(shù)下標(biāo)從列表的最后一個(gè)開始計(jì)算,從-1開始
切片
>>> name = ["Python","JAVA","C++","C","C#"]>>> name[0:2]
['Python', 'JAVA']#列表的切片,從下標(biāo)0取到下標(biāo)1(結(jié)束的位置不包括)
>>> name[:2]
['Python', 'JAVA']#下標(biāo)為0時(shí)可以不寫
#注意負(fù)數(shù)下標(biāo)
>>> name[-3:]
['C++', 'C', 'C#']>>> name[-3:-1]
['C++', 'C']#使用負(fù)數(shù)下標(biāo)切片時(shí),仍然從右到左計(jì)算,下標(biāo)-1不寫時(shí),取到-1下標(biāo)的值,寫的時(shí)候則不包括-1下標(biāo)的值
>>> name[0:-1:2]
['Python', 'C++']>>> name[::2]
['Python', 'C++', 'C#']#同上的負(fù)數(shù)下標(biāo),注意區(qū)別,第三個(gè)值為步長(zhǎng)
追加
>>> name.append("Perl")>>>name
['Python', 'JAVA', 'C++', 'C', 'C#', 'Perl']
插入新值
>>> name.insert(2,"Ruby")>>>name
['Python', 'JAVA', 'Ruby', 'C++', 'C', 'C#', 'Perl']>>> name.insert(-1,"Lisp")>>>name
['Python', 'JAVA', 'Ruby', 'C++', 'C', 'C#', 'Lisp', 'Perl']#將新值插入某個(gè)值之前
修改
>>> name[2] = "PHP"
>>>name
['Python', 'JAVA', 'PHP', 'C++', 'C', 'C#', 'Lisp', 'Perl']
刪除
>>> name.remove("PHP")>>>name
['Python', 'JAVA', 'C++', 'C', 'C#', 'Lisp', 'Perl']>>> del name[5]>>>name
['Python', 'JAVA', 'C++', 'C', 'C#', 'Perl']>>>name.pop()'Perl'
>>>name
['Python', 'JAVA', 'C++', 'C', 'C#']>>> name.pop(3)'C'
#pop不加下標(biāo)時(shí)默認(rèn)刪除最后一個(gè)值,pop可以返回被刪除的值
>>>name
['Python', 'JAVA', 'C++', 'C#']
其他的一些方法
>>> name.index("JAVA")1
#返回值的下標(biāo)
>>> name.count("C++")1
#計(jì)數(shù)
>>>name
['Python', 'JAVA', 'C++', 'C#']>>>name.reverse()>>>name
['C#', 'C++', 'JAVA', 'Python']#翻轉(zhuǎn)整個(gè)列表
>>>name
['Python', 'JAVA', 'C++', 'C#']>>>name.sort()>>>name
['C#', 'C++', 'JAVA', 'Python']#列表的排序
>>> a = ["a","b","c"]>>>name.extend(a)>>>name
['C#', 'C++', 'JAVA', 'Python', 'a', 'b', 'c']#合并兩個(gè)列表
>>>a.clear()>>>a
[]#清除整個(gè)列表的值
>>> name_copy =name.copy()>>>name_copy
['C#', 'C++', 'JAVA', 'Python', 'a', 'b', 'c']#復(fù)制列表
列表的嵌套
>>> name = ["Python",[1,2,3],"JAVA","C++"]>>>name
['Python', [1, 2, 3], 'JAVA', 'C++']>>> name[1][2]3
列表的循環(huán)
name = ["Python","JAVA","C++"]for i inname:print(i)#結(jié)果
Python
JAVA
C++
小技巧
name = ["Python","JAVA","C++"]for index,item inenumerate(name):print(index,item)#結(jié)果
0 Python1JAVA2 C++
#同時(shí)循環(huán)列表的下標(biāo)及值
14、元組
元組是不可修改的列表,也叫只讀列表
>>> name = ("Python","JAVA","C++")>>>name
('Python', 'JAVA', 'C++')#創(chuàng)建一個(gè)元組
元組只有count與index
>>> name.count("C++")1
>>> name.index("C++")2
list(),將元組轉(zhuǎn)換為一個(gè)列表
>>> a =list(name)>>>a
['Python', 'JAVA', 'C++']
小技巧,無關(guān)元組
\033[31,32;1m%s\033[0m,對(duì)%s著色
15、字符串的常用操作
字符串可以使用下標(biāo)和切片操作。
.upper()/lower() #返回一個(gè)新字符串,其中原字符串的所有字母都被相應(yīng)地轉(zhuǎn)換為大寫或小寫。
.startswith()/.endswith() #返回 True, 如果它們所調(diào)用的字符串以該方法傳入的字符串開始或結(jié)束。
>>> a = "a:b:c:d:e:f"
>>> a.split(":")
['a', 'b', 'c', 'd', 'e', 'f']
a.strip()#刪除字符串兩邊的空白字符(空格、制表符和換行符)
a.rstrip() #刪除字符串右邊的空白字符(空格、制表符和換行符)
a.lstrip() #刪除字符串左邊的空白字符(空格、制表符和換行符)
>>> a = "{'a':'b','c':'d'}"
>>>type(a)
>>> b =eval(a)>>>b
{'a': 'b', 'c': 'd'}>>>type(b)
#將格式化的字符串轉(zhuǎn)換成字典,同理可以轉(zhuǎn)換列表跟元組
name = "Python"name.capitalize()#首字母大寫
name.casefold() #大寫全部變小寫
name.ljust(50,"-") #輸出'Python---------------------------'
name.center(50,"-") #輸出 '---------------------Python----------------------'
name..rjust(50,"-") #輸出'--------------------Python'
name.count('t') #統(tǒng)計(jì)t出現(xiàn)次數(shù)
name.encode() #將字符串編碼成bytes格式
name.endswith("n") #判斷字符串是否以n結(jié)尾
"Pyt\thon".expandtabs(10) #輸出'Pyt hon', 將\t轉(zhuǎn)換成多長(zhǎng)的空格
name.find('y') #查找y,找到返回其索引, 找不到返回-1
name.index('y') #返回y所在字符串的索引
'9aA'.isalnum() #判斷是否是字母和數(shù)字
'9'.isdigit() #判斷是否整數(shù)
name.isnumeric #方法檢測(cè)字符串是否只由數(shù)字組成。這種方法是只針對(duì)unicode對(duì)象。
name.isprintable #判斷是否為可打印字符串
name.isspace #判斷是否為空格
name.istitle #判斷是否首字母大寫,其他字母小寫
name.islower()/isupper() #判斷是否為小寫/大寫
>>> "|".join(['Python', 'JAVA', 'C++'])'Python|JAVA|C++'
>>> a = "a:b:c:d:e:f"
>>> a.partition(":")
('a', ':', 'b:c:d:e:f')
.replace(old,new,x)#將第x個(gè)字符替換
.swapcase #大小寫互換
.zfill() #返回指定長(zhǎng)度的字符串,原字符串右對(duì)齊,前面填充0
.isidentifier() #檢測(cè)一段字符串可否被當(dāng)作標(biāo)志符,即是否符合變量命名規(guī)則
16、字典
字典:鍵-值(key - value),key唯一,無序
>>> a = {"福建":"福州","廣東":"廣州","江西":"南昌"}>>>a
{'福建': '福州', '廣東': '廣州', '江西': '南昌'}#創(chuàng)建一個(gè)字典
>>> a["廣西"] = "南寧"
>>>a
{'福建': '福州', '廣東': '廣州', '江西': '南昌', '廣西': '南寧'}#增加
>>> a["廣西"] = "廣西"
>>>a
{'福建': '福州', '廣東': '廣州', '江西': '南昌', '廣西': '廣西'}#修改
>>> a.pop("廣西")'廣西'
>>>a
{'福建': '福州', '廣東': '廣州', '江西': '南昌'}>>> del a["江西"]>>>a
{'福建': '福州', '廣東': '廣州'}#刪除
>>> a = {"福建":"福州","廣東":"廣州","江西":"南昌"}>>>a.popitem()
('江西', '南昌')#隨機(jī)刪除
>>> a = {"福建":"福州","廣東":"廣州","江西":"南昌"}>>> "福建" ina
True#查找
>>> a.get("福建")'福州'
>>> a["福建"]'福州'
#取某個(gè)鍵的值,使用get方法如果鍵不存在則返回None,直接取鍵不存在則報(bào)錯(cuò)
>>>a.values()
dict_values(['福州', '廣州', '南昌'])>>>a.keys()
dict_keys(['福建', '廣東', '江西'])>>>a.items()
dict_items([('福建', '福州'), ('廣東', '廣州'), ('江西', '南昌')])>>> b =list(a.items())>>>b
[('福建', '福州'), ('廣東', '廣州'), ('江西', '南昌')]#返回值可以用于循環(huán)
>>> a.setdefault("福建")'福州'
>>> a.setdefault("福建","南寧")'福州'
>>> a.setdefault("廣西","南寧")'南寧'
>>>a
{'福建': '福州', '廣東': '廣州', '江西': '南昌', '廣西': '南寧'}#不存在則增加,存在則返回該鍵的值
>>>b
{1, 2, 3}>>> b = {1:2,3:4,5:6}>>>a.update(b)>>>a
{'福建': '福州', '廣東': '廣州', '江西': '南昌', '廣西': '南寧', 1: 2, 3: 4, 5: 6}#合并兩個(gè)字典
>>> a = dict.fromkeys([1,2,3],"abc")>>>a
{1: 'abc', 2: 'abc', 3: 'abc'}
a= {"福建":"福州","廣東":"廣州","江西":"南昌"}for i ina:print(i,a[i])#字典的循環(huán),結(jié)果
福建 福州
廣東 廣州
江西 南昌
17、集合
集合是一個(gè)無序的,不重復(fù)的數(shù)據(jù)組合。作用:
去重,把列表變成集合,自動(dòng)去重
關(guān)系測(cè)試,取交集、并集等關(guān)系
s = set([3,5,9,10]) #創(chuàng)建一個(gè)數(shù)值集合
t = set("Hello") #創(chuàng)建一個(gè)唯一字符的集合
t.add('x') #添加一項(xiàng)
s.update([10,37,42]) #添加多項(xiàng)
t.remove('H') #刪除
len(s) #長(zhǎng)度
s.copy()#返回 set “s”的一個(gè)淺復(fù)制
x in s #測(cè)試 x 是否是 s 的成員
x not in s #測(cè)試 x 是否不是 s 的成員
s.issubset(t)
s<=t#測(cè)試是否 s 中的每一個(gè)元素都在 t 中
s.issuperset(t)
s>=t#測(cè)試是否 t 中的每一個(gè)元素都在 s 中
s.union(t)
s|t#返回一個(gè)新的 set 包含 s 和 t 中的每一個(gè)元素
s.intersection(t)
s&t#返回一個(gè)新的 set 包含 s 和 t 中的公共元素
s.difference(t)
s-t#返回一個(gè)新的 set 包含 s 中有但是 t 中沒有的元素
s.symmetric_difference(t)
s^t#返回一個(gè)新的 set 包含 s 和 t 中不重復(fù)的元素
18、文件操作
文件的常用操作
f = open("文件名","模式")#打開文件,模式有以下幾種:
r 只讀模式(默認(rèn))
w 只寫模式(文件不存在則建立,文件存在則覆蓋)
a 追加模式(文件不存在則建立,文件存在則追加)
r+讀寫模式(可讀可寫可追加)
w+ 寫讀模式
a+ 追加讀模式
rb、wb、ab 處理二進(jìn)制文件
U 將\r \n \r\n自動(dòng)轉(zhuǎn)換成\n(與r或r+模式同時(shí)使用)
f.read()#讀文件
f.readline() #讀一行
f.readlines() #將文件每一行讀如一個(gè)列表
f.write()#將內(nèi)容寫入文件
f.close()#關(guān)閉文件
f.tell()#返回指針位置,按文件中字符的個(gè)數(shù)計(jì)算
f.seek() #回到某個(gè)指針位置
f.encoding()#返回文件所使用的編碼
文件的其他一些操作
f.readable() #判斷文件是否可讀
f.writeable() #判斷文件是否可寫
f.closed() #判斷文件是否關(guān)閉
f.seekable() #判斷是否可以移動(dòng)指針
f.name() #返回文件名
f.isatty() #如果文件連接到一個(gè)終端設(shè)備返回 True,否則返回 False
f.flush() #將緩存內(nèi)容寫入硬盤
f.truncate() #從頭開始截?cái)辔募?/p>
for line inf:print(line)#將文件一行行讀入內(nèi)存,一次只在內(nèi)存中保存一行
with open("文件名","模式") as f:#為防止打開文件之后忘記關(guān)閉,使用該方法在with代碼塊執(zhí)行完畢之后自動(dòng)關(guān)閉釋放文件資源
with open("文件名","模式") as f1,open("文件名","模式") as f2:#支持對(duì)多個(gè)文件進(jìn)行操作
19、字符的編碼與轉(zhuǎn)碼
encode:編碼 decode:轉(zhuǎn)碼
GBK-->UTF-8:GBK--decode-->Unicode--encode-->UTF-8
UTF-8-->GBK:UTF-8--decode-->Unicode--encode—>GBK
兩個(gè)不同編碼相互轉(zhuǎn)換都需要經(jīng)過Unicode。
.decode(原編碼)
.encode(轉(zhuǎn)換后編碼)
python 3.x默認(rèn)為UTF-8編碼。
在python 3.x中encode,在轉(zhuǎn)碼的同時(shí)還會(huì)把string變成bytes類型,decode在解碼的同時(shí)還會(huì)把bytes變回string。
20、函數(shù)
使用函數(shù)的意義:
減少重復(fù)的代碼
保持一致性,使代碼更容易修改
使程序更容易擴(kuò)展
def函數(shù)名(形參):'''文檔描述'''代碼塊return #返回執(zhí)行結(jié)果,可返回多個(gè)值,默認(rèn)返回None#定義一個(gè)函數(shù)
位置參數(shù),關(guān)鍵字參數(shù),默認(rèn)參數(shù),e.g:
deftest(x,y):print(x)print(y)returntest(1,2)#位置參數(shù),將函數(shù)所獲得的參數(shù)按照一一對(duì)應(yīng)的位置傳入,輸出結(jié)果為
1
2
deftest(x,y):print(x)print(y)returntest(x=1,y=2)#關(guān)鍵字參數(shù),按照關(guān)鍵字將值傳入,輸出結(jié)果為
1
2
deftest(x,y):print(x)print(y)returntest(1,y=2)#位置參數(shù)與關(guān)鍵字參數(shù)一起使用,注意:關(guān)鍵字參數(shù)不能放在位置參數(shù)之前,輸出結(jié)果為
1
2
def test(x,y,z=3):print(x)print(y)print(z)returntest(1,y=2)#默認(rèn)參數(shù),直接在定義函數(shù)的時(shí)候賦值,可以在調(diào)用函數(shù)的時(shí)候修改,輸出結(jié)果為
1
2
3
非固定參數(shù)
def test(*args):print(args)returntest(1,2)
test(1,2,3)
test(*[1,2,3,4])#非固定參數(shù),可以傳入不同個(gè)數(shù)的參數(shù),只能接受位置參數(shù),以元組的方式輸出,結(jié)果
(1, 2)
(1, 2, 3)
(1, 2, 3, 4)def test(**args):print(args)returntest(x=1,y=2)
test(x=1,y=2,z=3)#非固定參數(shù),以字典的方式輸出,只接受關(guān)鍵字參數(shù),結(jié)果
{'x': 1, 'y': 2}
{'x': 1, 'y': 2, 'z': 3}
21、作用域、局部與全局變量
在子程序中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。
全局變量作用域是整個(gè)程序,局部變量作用域是定義該變量的子程序。
當(dāng)全局變量與局部變量同名時(shí),在定義局部變量的子程序內(nèi),局部變量起作用,在其它地方全局變量起作用
22、遞歸與高階函數(shù)
遞歸
一個(gè)函數(shù)在內(nèi)部調(diào)用自身,該函數(shù)即為遞歸函數(shù)
特性:
必須有一個(gè)明確的結(jié)束條件
每次進(jìn)入更深一層遞歸時(shí),問題規(guī)模相比上次遞歸都應(yīng)該有所減少
遞歸效率不高,遞歸層次過多會(huì)導(dǎo)致棧溢出
高階函數(shù)
變量可以指向函數(shù),函數(shù)的參數(shù)能夠接收變量,那么一個(gè)函數(shù)就可以接收另一個(gè)函數(shù)作為參數(shù),這種函數(shù)稱為高階函數(shù)。e.g:
defadd(x,y,f):return f(x)+f(y)
res= add(3,-6,abs)print(res)#結(jié)果
9
總結(jié)
以上是生活随笔為你收集整理的python函数和模块有什么关键特性_Python学习----第一模块笔记(Python基础知识)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡最低还款额是什么意思?
- 下一篇: python3读写excel文件_Pyt