https://docs.python.org/3/tutorial/
#! /root/python-3.6.5/bin/python3.6 ?(制定用誰來解析下面的code,我沒有將pthon3.6安裝到系統路徑,就這樣寫了)
#! /usr/bin/env python3 ???(如果安裝在系統路徑,可以直接這樣寫)
?
基本運算
Python算術運算符
/????除,x 除以 y(返回浮點型)
**????冪,返回x的y次冪
//????取整除,返回商的整數部分(類C語言的除)????9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0
Python比較運算符
==, !=, >, <, >=, <=??(全部類C)
Python賦值運算符
=, +=, -=, *=, /=, %=, **=, //=??(全部類C)
Python位運算符(全部類C)
&, |, ^, ~, <<, >>,
Python邏輯運算符
and??????(試圖找到第一個false)從左到右計算表達式的值,為真則continue,所有均為真則結果為最后一個值,遇假返回第一個假的值
or????????(試圖找到第一個true)從左到右計算表達式的值,為假則continue,所有均為假則結果為最后一個值,遇真則返回第一個為真的值
除了True和False外,None,數字0,空序列(空字符串 "" ,空元組,空list和空字典)均被python認為是假,其他認為是真
Python成員運算符 in / not in
in????如果在指定的序列中找到值返回 True,否則返回 False。????x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
not in????如果在指定的序列中沒有找到值返回 True,否則返回 False。????x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
for xx in 序列,遍歷序列元素,序列可以是(有序的) string/list/tuple 或 (無序的) set/dict(dict.keys())
Python身份運算符
身份運算符用于比較兩個對象的存儲單元
is????判斷兩個標識符是不是引用自一個對象????x is y, 類似 id(x) == id(y) , 如果引用的是同一個對象則返回 True,否則返回 False
is not????判斷兩個標識符是不是引用自不同對象????x is not y , 類似 id(a) != id(b)。
注: id()函數用于獲取對象內存地址。如果x 和 y 賦予相同的value,那么python會讓兩個變量引用到 那個相同的內存
?
?
數值類型
Python3 支持 int(python3中唯一的整數類型)、float、bool、complex(復數)。Number值本身不允許改變(即,change某個變量的值其實就是新分配空間了) 。內置的 type() 函數可以用來查詢變量所指的對象類型。
?
數據類型的轉換:
? int(x) 將x轉換為一個整數。
? str(x) 將x轉換為一個string。
? float(x) 將x轉換到一個浮點數。
? complex(x) 將x轉換到一個復數,實數部分為 x,虛數部分為 0。
? complex(x, y) 將 x 和 y 轉換到一個復數,實數部分為 x,虛數部分為 y。x 和 y 是數字表達式。
? 1、Python可以同時為多個變量賦值,如a, b = 1, 2。
? 2、一個變量可以通過賦值指向不同類型的對象。
? 3、在混合計算時,Python會把整型轉換成為浮點數。
? 4、Python支持復數,復數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示,復數的實部a和虛部b都是浮點型
? 5、del value即刪除變量對數字對象的引用 (當引用計數為0時,此數字對象可能會被garbage collect )
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
????
>>> isinstance(a, int)
????True
?
字符串
? 字符串使用單引號和雙引號等價。? 字符串相加表示連接,相乘表示重復。 ? 索引字符串 或 切片式索引 都是只讀的
str1 = "hello fangding\n"????#轉義字符串,\n被轉義為換行
str2 = r"hello fangding\n"????#raw字符串,告訴python關閉轉義
str3 = u"hello fangding\n"????#u字符串,告訴python此串為unicode編碼(也會轉義的)
str4 = "your age %d,sex %s,record %12.5f\n"%(28,"male",78.5)????#格式化字符串(類C)(12.5f表示整個78.5占12個字符,小數點后保留5位精度)
str5 = '''
????多
????行
????串'''?????????#''' '''或者 """ """ 之間用于表示多行字符串(有\則同樣會轉義)
str1 = "hello fangding\n", 則str1[0]=="h",??str1[1]=="e",??str1[0]=="l",…….??#索引字符串,只讀,str1[0]="a"會導致出錯
str1[2:5]????????字符串取片段(左閉右開!) ,str1的第[2][3][4]個字符
str1[2:]? ? ? ? ? ?str1的第[2]到最后的所有字符
str1[2:-1]? ? ? ? str1的第[2]到第[-2]個字符(倒數第二個)
str1[:5]? ? ? ? ? ?str1從開始到第四個字符
str1[8:3:-1]? ? ?str1的第[8]到第[4]個字符,-1是步長
? 常用的字符串庫函數 >>>help(str)
len(str)????字符串的長度,特殊轉義字符包括\n也計算在內
int(str)????將純數字字符串轉換為int(若字符串內含非數字則會報錯)
ord(str)????獲得字符的ASCII碼值(str的len只能是1,否則報錯)
chr(int)????根據ASCII碼值得到字符
str.find(s,a,b)????????在str[a,b)區間內查找字符串s(a和b均為可選參數,不寫則默認整個字符串),若出現多處,返回最左邊的index,沒找到返回-1
str.rfind(s,a,b)????在str[a,b)區間內查找字符串s(a和b均為可選參數,不寫則默認整個字符串),若出現多處,返回最右邊的index,沒找到返回-1
str.strip()????????????去掉str左右兩邊的空格,相當于str.strip(" "),若寫作str.strip("\n"),則去掉str左右兩邊的\n字符
str.lstrip()????????只是去掉str左邊的空格,相當于str.lstrip(" ")
str.rstrip()????????只是去掉str右邊的空格,相當于str.rstrip(" ")
str.split(" ")????以空格字符作為分隔符,分割str(若有多個連續空格,則中間的那些空格也會被捕捉),空格即split()默認參數
str.replace("fang","ding")????將str中的所有"fang"全部替換為"ding",此函數返回一個副本,str引用的string變量沒有改變
str.isdigit()????????str是否是純數字?
str.isalpha()????????str是否是純英文字符?
str.isalnum()????????str是否是 數字+英文字符?
str.islower()????????str中包含的string是否都是小寫?
str.lower()????????????將str中包含的string全部轉為小寫
str.isspace()????????str是純空格嗎
?
列表
[ ] 之間、用逗號分隔開的元素列表,類似C中的數組,不同在于數據項可不同類型(甚至可為列表),可動態增減,長度不定。具有數組風格和鏈表風格。
list = []
list1 = [12, "hello fang", 23.5]
list3 = list("this is ABC")?#將一個string轉化為一個list,list每個元素對應了string中的每個字符
len(list1)????????????計算list1長度
list1[0]????????????訪問index為0的元素,越界會報錯,可讀寫訪問(string、元組均只讀訪問)、
list1[0:2:1]????????左閉右開取片段,返回一個包含有list[0] list[1] 數據的新的list,1為缺省步長
for c in list1:?????迭代器訪問list元素
???xxx
list1= ( list1+ list2 ) * 2????????????等價于 list1.extend(list2) * 2 ,鏈表的連接
list1.append("www.baidu.com");????????在list末尾添加元素
list1.insert(index, 35.2)????????在list[index]元素前面插入新元素35.2
del list1[index]????????????????刪除list[index]元素
list1.remove(12)????????????????刪除list中值為12的元素
list1.pop(index)????????????????刪除list[index]元素并將其值返回,默認pop最后一個
list1.index(23.5)????????????????返回 值為23.5的元素的index
list1.count(12)????????????????????統計 值為12的元素的個數,可用于查看set中某個元素是否存在
min(list)?????返回列表中最小的元素
max(list)?????返回列表中最大的元素
sum(list)????返回列表中所有元素的總和(一般為純數字list)
list1.sort([func])????對原來的列表進行排序(list1將被改寫,使用sorted(list1)則獲得臨時副本),可指定func作比較函數,可指定reverse=True。
list1.reverse()????????反向列表的所有元素(list1將被改寫)
list1.clear()????????清空列表的所有元素
list1.copy()????????返回一個列表,和list1的元素完全相同
?
從序列創建列表。將一些操作應用于序列的每個元素,結果作為生成新列表的元素,或者根據確定的判定條件創建子序列
#對列表中的每個元素x,做x->[x,x^2]的映射,得到列表 [[2, 4], [4, 16], [6, 36]]
[[x, x**2] for x in vec1]
#完整的for-if列表推導,對序列中 >3 的那些元素x,做x->3x的映射。if作為可選過濾器
[3*x for x in vec1 if x > 3]
#嵌套,對每一個元素x,執行后面的for-if, 得到一個長度為 len(vec1)*len(vec2)的list
[x*y for x in vec1 for y in vec2]
#兩個序列對應元素的乘積
[vec1[i]*vec2[i] for i in range(len(vec1))]
#得到一個string組成的list,string代表355/113,精度不斷增加
[str(round(355/113, i)) for i in range(1, 6)]
?
元組
寫在小括號 ( ) 里,元素之間逗號隔開,數據項可不同類型。與列表類似,但元組的元素不能修改,亦不可增刪。但可以一次刪除整個元組,元組的整體賦值相當于指向另一個新的元組。函數多值返回得到的就是元組。
tuple string list均屬于sequence,三者之間可以互相轉換
tup1=()????????????初始化一個空的元組
tup2=(1,)????????初始化一個只有一個元素的元組,注意必須要加上","不然會被python理解成int類型
tup1[index]????????只讀訪問第[index]個元素(不可以改變其指向)
tup3 = tup1+tup2*2????????????元組的連接,因為元組只讀,所以肯定是返回一個新的元組
for x in (1,2,3): print x????遍歷元組中的元素
集合
只關心元素存在與否,無序的不重復序列。用于成員關系測試和去重復元素,可以增刪元素。使用 { } 可用于創建集合或字典(區別在于里面的元素是單個數據還是鍵值對)。
set1=set()????????????????????創建一個空的集合只能用set(), {}用于創建空的字典了
set2=set("abcasdg hkdf\n")????將一個string強制轉換為一個set,進set過程自動去重復,空格和\n也被認為普通成員
set4={"Tom","Jim","Mary","Rose"}? ? 字面量創建一個set
set4.add("fang")????向集合中添加一個元素
set4.pop()????????????這是從集合中隨機彈出一個元素
set4.remove(xxx)????從集合中刪除元素xxx,若xxx不在集合中則會報錯
xxx in set4????????????判斷xxx是否在集合中
xxx not in set4????????判斷是否不在集合中
set2.issubset(set3)????????判斷set2是否是set3的子集合
set2.updata(set3)????????返回增加了set3元素后的集合set2
#返回一個集合,為set2 和set3的差集(即在set2中但不在set3中的元素), 等價于set2.difference(set3)
set2 - set3
#返回一個集合,為set2 和set3的并集(即在set2中或者在set3中的元素或者兩個都在的元素) 等價于 set2.union(set3)
set2 + set3
#返回一個集合,為set2 和set3的交集(即同時在set2和set3中的元素)??等價于 set2.intersection(set3)
set2 & set3
#返回一個集合,不同時在set2和set3中的元素
set2 ^ set3
a = {x for x in 'abracadabra' if x not in 'abc'}???????集合推導式(推導出一個集合)
?
鍵值對集合(字典)
鍵值對集合,即字典,多為哈希表實現。無序,通過key來訪問元素而不是index。key使用常量類型,且在同一個字典中應該唯一
dict1 = {}????????????????????????????????#初始化一個空的字典
dict2 = {"tom":98,"jim":86,"mary":92}????#初始化一個字典,若此時存在相同的key,則先出現的那個被覆蓋
dict1["one"] = "fang"????????#訪問修改字典某個key對應的值。寫入時key不存在則向字典中添加鍵值對,key已存在則覆蓋,讀取時key不存在會報錯,key為字面常量,value無要求
dict1.get("tom","0")????????#獲取key為"tom"的value,若key不存在則返回"0"(不寫則返回None)
"one" in dict1.keys()????????#等價于 dict1.has_key("one"), dict1.keys()返回鍵值組成的list,dict1.values()返回值組成的list,dict1.items()返回(key,value)元組 組成的list
del dict1["tom"]????????????#刪除某個鍵值對
dict1.clear()????????????????#清空字典,對字典本身操作
del dict1????????????????????#刪除整個字典
dict1.pop("tom")????????#返回key為tom的value,并鍵值對從字典中刪除
dict1.popitem()????????????#隨機刪除字典中的一個鍵值對,并返回他們的鍵值對組成的元組
dict3 = {x : x**2 for x in (2, 4, 6)}?????#字典的推導式
for k,v in dict1.items():
????print(k,v)
?
流程控制
????if 表達式1:????????????#冒號
????????語句
????elif?表達式4:
????????語句
????else:
????????語句
沒有switch–case語句
????while 判斷條件:????#冒號
?? ??? ?語句
沒有do-while循環
????#!/usr/bin/env python3
????n = 100
????sum,counter = 0,1???????#復合賦值
????while counter <= n:
????????sum = sum + counter #若此循環體只有一句的話,是可以直接與while放在同一行的
????????counter += 1????????#計算1到100的和
????print("1 到 %d 之和為: %d" % (n,sum))
?
????while mylist:
????????mylist.pop()
while循環和else配合使用(區別于while內部提前break)
????#!/usr/bin/python3
????count = 0
????while count < 5:
????????print (count, " 小于 5")
????????count = count + 1
????else: print (count, " 大于或等于 5")???#循環條件順次全部執行完畢的時候才會進入
????for
in
:
????????
????else:
????????
?????#順次全部執行完畢后進入(區別于while內部提前break)
? ? for可以遍歷任何序列?eg.列表/字符串,可以遍歷range()函數生成的數字序列(c中 for(int i=0;i<10;i++)就使用range()來對標)。
????range(5)????????#生成一個0-4的序列,類型就是叫range
????range(5,10)????????#生成一個5-9的序列
????range(5,10,2)????#生成一個5-10,步長為2的序列(最后一個數可能并非10而是一個<10的數)
????list(range(5))????????#range強制轉換為一個list
????for i in range(5):????????????#打印0-4
????????print(i)
????a = ['Google', 'Baidu', 'Runoob', 'Taobao', 'QQ']
????for i in range(len(a)):????????#C風格訪問list
????????print(i, a[i])
#enumerate()能順便獲取序列元素的index(對string/list/tuple均適用)
for i,x in?enumerate(tup3):
???? print(i,x)??
#使用zip平行遍歷(同時訪問 list[i],tup[i])多個不要求同類型的序列
for a,b in?zip(list1,tup1)
????print(a,b)
break 和 continue(類c)
pass 空語句,不做任何事情,一般用做占位語句
?? ?while True:????????????#相當于while(1);
?????? ?pass
函數
def funcA(a,b,c):
return a+b+c
print(funcA(2,3,4))
def funcB(*x)
print(x) # 函數的參數前有*表示運行時python收集可變參數,組織成x傳入,x是一個元組
f = lambda a,b,c:a+b+c
print(f(2,3,4))
調用其它模塊
import其它python模塊(模塊是一個py文件,以.py結尾,其中包含python函數,或python的class,或python對象)。(import 包) , (from 包 import 子包或子包內的func/class/others)
import sys
sys.path.append('fileA.py所在的路徑') ?? ??#同一個目錄下可以省略
#導入python文件level,貌似文件名不可以是數字,eg.2.py,不然 import 2 的時候會語法報錯
import fileA
fileA.funcA()
import sys
sys.path.append('fileA.py/fileB.py所在的路徑')
#導入python文件中的具體某個函數(from fileA import * 也是可以的)
from fileA import funcA,funcB
#導入python文件中的具體某個類??(from fileA import * 也是可以的)
from fileB import classA,classB
funcA()
ca = classA()
?
如果某個 目錄 dirA 下有 __init__.py 文件,那么這個 目錄 就 會被當成一個包 (dirA下面的python文件就被當作子包)??https://blog.csdn.net/u013210620/article/details/78554138
(python認為 . 的左邊必須是一個python包,不滿足這個要求,就報錯)
import dirA? ? ? ??? ??? #dirA.fileA.funcA()
import dirA.fileA? ? ? ? #dirA.fileA.funcA()
from dirA import fileA ???#fileA.funcA()
from dirA.fileA import funcA,funcB
__init__.py 三個作用:?
1.表明此目錄作為一個python包,很多空的 __init__.py 就是只使用了功能(fileA.py 則 fileA 就被python默認是一個包)
2.定義__all__=['subpackage', 'funcA', 'funcB', 'classA', 'classB'], 這樣外部調用 import * 的時候知道要import哪些
3.執行一些python語句(他們會在import的時候被調用),比如 初始化包的語句 或者 import語句
import sys, os
sys.path.append(os.pardir)??#好像直接寫 ".." 也是可以的
from common.functions import *
from common.gradient import numerical_gradient
?
更高level的調用
import os
str=('../B.py')?????//也可以是一段shell腳本或者c的binary,只要是能在終端打的命令都可以
p=os.system(str)????//執行
print(p)????????????//打印執行結果 0表示 success, 1表示 fail
調用c/c++模塊?https://www.cnblogs.com/apexchu/p/5015961.html
(首先將c/c++文件make成so文件)
import ctypes
#load the shared object file
xxx = ctypes.cdll.LoadLibrary('./xxx.so')
xxx.funcA()
xxx.funcB()
將c++模塊封裝為python接口?https://www.cnblogs.com/gkwang/p/4353220.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
