1.變量
python 中變量很簡單,不需要指定數據類型,直接使用等號定義就好。python變量里面存的是內存地址,也就是這個值存在內存里面的哪個地方,如果再把這個變量賦值給另一個變量,新的變量通過之前那個變量知道那個變量值的內存地址存起來,而不是指向之前的那個變量。
變量的定義規則:
-
變量名要見名知意,不能用拼音,不能用中文
-
變量名只能是字母,數字,下划線的任意組合
-
變量名的第一個字符不能是數字
以下關鍵字不能聲明為變量名:
2.單引號,雙引號和三引號(三個單引號)
python 中定義變量的時候字符串都用引號引起來,此時單引號和雙引號沒有區別。但是如果字符串中有單引號的話,外面就得用雙引號;如果里面有雙引號,外面就用單引號;如果既有單引號又有雙引號,那么用三引號,三引號也可以多行注釋代碼,單行注釋,使用#。
3.數字
-
python 中數字類型的變量可以表示任意大的數值
-
十六進制一 0x 開頭,八進制以 0o 開頭,二進制以 0b 開頭
-
python 中可以表示復數用j來表示虛部 complex(a,b)函數可以形成復數
-
real 查看實部 imag 查看虛部 conjugate()返回共軛復數
a=99999999999999 print(a*a) print(math.sqrt(3**2+4**2)) a=3+4j b=complex(5,6) c=a+b print(c) print(c.real) print(c.imag) print(c.conjugate())
運行結果
9999999999999800000000000001 5.0 (8+10j) 8.0 10.0 (8-10j)
4.輸入,輸出
python 使用input函數接收用戶輸入,python2中使用raw_input,接收的是一個字符串;使用print輸出:
input 在接收輸入的時候,是可以看到你輸入的值的,如果是輸入密碼這樣的呢,不想讓別人看到你的密碼,怎么辦呢,就需要用到一個標准庫,getpass,什么是標准庫呢,就是不需要你再去安裝,裝完 python 就有的庫,就是標准庫,getpass 就是一個標准庫,導入進來之后,直接使用 getpass.getpass 方法就可以在輸入的時候,不會顯示了:
注意:pycharm 不支持 getpass 模塊,在 python 模塊的 ide 下可展示。
5.列表(List)
創建一個列表,只要把逗號分隔的不同的數據項使用方括號括起來即可。
與字符串的索引一樣,列表索引從0開始。列表可以進行截取、組合等。
#!/usr/bin/python list1 = ['physics', 'chemistry', 1997, 2000] list2 = [1, 2, 3, 4, 5, 6, 7 ] print "list1[0]: ", list1[0] print "list2[1:5]: ", list2[1:5]
你可以對列表的數據項進行修改或更新,你也可以使用append()方法來添加列表項,如下所示:
list = [] ## 空列表 list.append('Google') ## 使用 append() 添加元素 list.append('Runoob') print list
列表對 + 和 * 的操作符與字符串相似。+ 號用於組合列表,* 號用於重復列表。如下所示:
6.Python列表函數&方法
Python 包含以下函數:
-
cmp(list1, list2):比較兩個列表的元素
-
cmp(list1, list2):比較兩個列表的元素
-
len(list):列表元素個數
-
max(list):返回列表元素最大值
-
min(list):返回列表元素最小值
-
list(seq):將元組轉換為列表
Python 包含以下方法:
-
list.append(obj):在列表末尾添加新的對象
-
list.count(obj):統計某個元素在列表中出現的次數
-
list.extend(seq):在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
-
list.index(obj):從列表中找出某個值第一個匹配項的索引位置
-
list.insert(index, obj):將對象插入列表
-
list.pop([index=-1]):移除列表中的一個元素(默認最后一個元素),並且返回該元素的值
-
list.remove(obj):移除列表中某個值的第一個匹配項
-
list.reverse():反向列表中元素
7.常用內置函數
執行這個命令可以查看所有內置函數和內置對象(兩個下划線)
>>>dir(__builtins__) ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
'__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy',
'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
測試:
a=-2 b=[1,2,3,4,0] c='a' print( abs(a) ) #返回數字的絕對值 print( all(b) ) #對於可迭代對象所有元素 全部非零返回true 若存在零返回false print( any(b) ) #對於可迭代對象存在元素非零,則返回true print( bin(a) ) #把數字轉換為二進制串 print( callable(a) ) #測試對象是否可調用,類和函數是可調用的 print( chr(65) ) #返回ASCII編碼的字符 #print( dir(a) ) #返回指定對象的成員列表 print( ord(c) ) #返回一個字符的編碼 print( str(b) ) #把對象轉化為字符串 print( help(math.sin)) #查看指定方法的使用幫助 print( list(b) )# 把對象轉換為 列表 print( set(b) ) #集合 print( tuple(b) )# 元組 #print( dict(b) ) #字典並返回
結果:
2 False True -0b10 False A 97 [1, 2, 3, 4, 0] Help on built-in function sin in module math: sin(…) sin(x) Return the sine of x (measured in radians). None [1, 2, 3, 4, 0] {0, 1, 2, 3, 4} (1, 2, 3, 4, 0)
8.對象的刪除(好習慣)
x=[1,2,3,4,5] y=3 print(y) del y del x[1] print(x) print(y)
結果:
3 [1, 3, 4, 5] Traceback (most recent call last): File “.../練習.py”, line 11, in print(y) NameError: name ‘y’ is not defined
9.模塊的導入與使用
python 中有大量第三方庫可用 "pip3 install 。。。"進行有需要的安裝
在使用庫函數時,需要導入,有兩種方法:
-
import 模塊名【as 別名】:使用這種方式導入后,需要在使用的對象前加上前綴 “模塊名 . 對項名”的方式進行訪問,也可以用“別名 . 對象名”的方式使用其中的對象
-
from 模塊名 import 對象名【as 別名】:使用這種方式僅導入使用的對象,並且可以為這個對象起一個別名,這種方法可以減少查詢次數,減少程序員的代碼量,不需要使用模塊名作為前綴
import math from math import sin as f print(math.sin(3)) print(f(3))
結果:
0.1411200080598672 0.1411200080598672
比較極端的情況是一次導入模塊中全部的對象:
from math import *
不推薦使用這中方法,一旦多個模塊中有同名的對象,會導致混亂
10.條件判斷:
python中條件判斷使用if else 來判斷,多分支使用if elif...else,也就是如果怎么怎么樣就怎么怎么樣,否則怎么怎么樣,格式如下:
具體代碼如下:
11.循環
python 中有兩種循環,while和for,兩種循環的區別是,while循環之前,先判斷一次,如果滿足條件的話,再循環,for循環的時候必須有一個可迭代的對象,才能循環.python中for循環很簡單,循環的是一個可迭代對象中的元素,你這個對象中有多少個元素,就循環多少次,比如說一個數組list,list = ['a','b','c'],在別的語言中要想獲取到list中所有的值,必須得使用循環取下標這種方式去取數據,就得這樣寫list[x],list[x],list[x]這樣,在Python里面就不需要直接循環就取的是這個list里面的值,循環里面還有兩個比較重要的關鍵字,continue和break,continue的意思是,跳出本次循環,繼續進行下一次循環,break的意思是停止循環,也就是說在continue和break下面的代碼都是不執行的,格式如下:
12.range()函數
python 的 range() 函數可用來創建一個整數列表,一般用在 for 循環中.
-
range()語法:range(start, stop[, step])
-
start:計數從start開始,默認是從0開始(閉區間),如:range(5)等價於range(0,5).
-
stop:計數到stop結束,但不包括stop(開區間).如:range(0,5)是[0, 1, 2, 3, 4],不包含5.
-
step:步長,相鄰兩個值的差值,默認為1.如:range(0,5)相當於range(0, 5, 1).
13.列表推導式
列表推導式(list comprehension)是指循環創建列表.
# 列表推導式 list_b = [b for b in range(5)] print(list_b)
上面分別是用for循環和列表推導式創建列表的代碼,list_a和list_b的結果是一樣的,都是[0, 1, 2, 3, 4].
下面來看復雜點的列表推導式:
# in后面跟其他可迭代對象,如字符串 list_c = [7 * c for c in "python"] print(list_c) # 帶if條件語句的列表推導式 list_d = [d for d in range(6) if d % 2 != 0] print(list_d) # 多個for循環 list_e = [(e, f * f) for e in range(3) for f in range(5, 15, 5)] print(list_e) # 嵌套列表推導式,多個並列條件 list_g = [[x for x in range(g - 3, g)] for g in range(22) if g % 3 == 0 and g != 0] print(list_g)
運行結果:
['ppppppp', 'yyyyyyy', 'ttttttt', 'hhhhhhh', 'ooooooo', 'nnnnnnn'] [1, 3, 5] [(0, 25), (0, 100), (1, 25), (1, 100), (2, 25), (2, 100)] [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13, 14], [15, 16, 17], [18, 19, 20]]
代碼解釋:
-
列表推導式會遍歷后面的可迭代對象,然后按照for前的表達式進行運算,生成最終的列表.
-
如果有if條件語句,for遍歷后緊跟着進行條件判斷.
-
3.如果有多個for循環,則最終的數據數量為多個for循環的笛卡爾積.
-
4.可以進行嵌套的列表推導,與嵌套for循環的原理相同.
14.字典推導式
如果列表推導的概念已經為你所熟知,接受字典推導並不難.直接看代碼吧:
# 因為key是唯一的,所以最后value都是1 dict_a = {key: value for key in 'python' for value in range(2)} print(dict_a) # 可以根據鍵來構造值 dict_b = {key: key * key for key in range(6)} print(dict_b) # 遍歷一個有鍵值關系的可迭代對象 list_phone = [('HUAWEI', '華為'), ('MI', '小米'), ('OPPO', 'OPPO'), ('VIVO', 'VIVO')] dict_c = {key: value for key, value in list_phone} print(dict_c)
運行結果:
{'p': 1, 'y': 1, 't': 1, 'h': 1, 'o': 1, 'n': 1} {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} {'HUAWEI': '華為', 'MI': '小米', 'OPPO': 'OPPO', 'VIVO': 'VIVO'}
15.集合推導式
同樣的,直接看代碼,這樣可以直觀的看到集合推導式
# 遍歷一個可迭代對象生成集合 set_a = {value for value in '有人雲淡風輕,有人負重前行'} print(set_a)
運行結果:
{'負', '有', '人', '輕', '前', '雲', '重', ',', '淡', '風', '行'}
集合是無序且不重復的,所以會自動去掉重復的元素,並且每次運行顯示的順序不一樣。
16.創建類
使用 class 語句來創建一個新類,class 之后為類的名稱並以冒號結尾:
class ClassName: '類的幫助信息' #類文檔字符串 class_suite #類體
類的幫助信息可以通過ClassName.__doc__查看。
class_suite 由類成員,方法,數據屬性組成。
實例
以下是一個簡單的 Python 類的例子:
#!/usr/bin/python # -*- coding: UTF-8 -*- class Employee: '所有員工的基類' empCount = 0 def __init__(self, name, salary): self.name = name self.salary = salary Employee.empCount += 1 def displayCount(self): print "Total Employee %d" % Employee.empCount def displayEmployee(self): print "Name : ", self.name, ", Salary: ", self.salary
-
empCount 變量是一個類變量,它的值將在這個類的所有實例之間共享。你可以在內部類或外部類使用 Employee.empCount 訪問。
-
第一種方法__init__()方法是一種特殊的方法,被稱為類的構造函數或初始化方法,當創建了這個類的實例時就會調用該方法
-
self 代表類的實例,self 在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。
self代表類的實例,而非類
類的方法與普通的函數只有一個特別的區別——它們必須有一個額外的第一個參數名稱, 按照慣例它的名稱是 self。
創建實例對象
實例化類其他編程語言中一般用關鍵字 new,但是在 Python 中並沒有這個關鍵字,類的實例化類似函數調用方式。
以下使用類的名稱 Employee 來實例化,並通過 __init__ 方法接收參數。
"創建 Employee 類的第一個對象" emp1 = Employee("Zara", 2000) "創建 Employee 類的第二個對象" emp2 = Employee("Manni", 5000)
訪問屬性
您可以使用點號 . 來訪問對象的屬性。使用如下類的名稱訪問類變量:
emp1.displayEmployee() emp2.displayEmployee() print "Total Employee %d" % Employee.empCount
執行以上代碼輸出結果如下:
Name : Zara ,Salary: 2000 Name : Manni ,Salary: 5000 Total Employee 2
你可以添加,刪除,修改類的屬性,如下所示:
emp1.age = 7 # 添加一個 'age' 屬性 emp1.age = 8 # 修改 'age' 屬性 del emp1.age # 刪除 'age' 屬性
你也可以使用以下函數的方式來訪問屬性:
-
getattr(obj, name[, default]) : 訪問對象的屬性。
-
hasattr(obj,name) : 檢查是否存在一個屬性。
-
setattr(obj,name,value) : 設置一個屬性。如果屬性不存在,會創建一個新屬性。
-
delattr(obj, name) : 刪除屬性。
hasattr(emp1, 'age') # 如果存在 'age' 屬性返回 True。 getattr(emp1, 'age') # 返回 'age' 屬性的值 setattr(emp1, 'age', 8) # 添加屬性 'age' 值為 8 delattr(emp1, 'age') # 刪除屬性 'age'
參考文章
python 學習筆記(超詳細)(一)
python學習筆記(一)python簡介和基礎