1.面試題相關:python
1.py2和py3的區別git
2.運算符的計算 :3 or 9 and 8面試
3.字符串的反轉centos
4.is和==的區別app
5.v1 = (1) v2 = 1 v3 = (1,)有什麼區別函數
v1 、v2都是數字,v3是元組操作系統
6.線上操做系統:centos日誌
7.每種數據類型,列舉你瞭解的方法code
8.深淺拷貝作用域
9.文件操做,大文件如何讀取內容(如50G的日誌文件)
v=open(……)
for line in v:
print(line)
v.close()
10.一行寫出:9*9乘法表
git流程
2.函數
方法(數據類型的)相似於函數,但不是函數 。
嚴格按照順序傳參數:位置方式傳參
實際參數能夠是任意類型
return沒有返回值時,默認返回None
return的做用:1.返回值 2.終止函數的執行
函數內部執行過程當中,遇到return就終止
return能夠返回任意類型
特殊狀況:return 1,2,'alex' 表示返回的是元組,與return(1,2,'alex')相同
參數能夠是任意個數
能夠是任意類型
def func(a1,a2,a3,a4): print(a1,a2,a3,a4) func(2,'name',[1,2,3],False)
調用/執行函數的時候嚴格按照位置的順序傳入參數
def func(a1,a2,a3): print(a1,a2,a3) func(66,'alex',3)
關鍵字傳參就是將形參放入到實參中去使用
def func(a1,a2): print(a1,a2) func(a1=22,a2=8)
關鍵字傳參與位置傳參是能夠混合使用的:位置傳入的參數要放在前面,關鍵字傳參要放在後面,最後等於總參數個數
def func(a1,a2,a3): print(a1,a2,a3) func(1,2,a3=3) func(1,a2=2,a3=3) func(a1=1,a2=2,a3=3) func(a1=1,2,3) # 是錯誤的
def func() : 自定義函數 open() 這兩個爲python的內置函數
pass len()
def func(a1,a2,a3=9,a4=10): # 默認參數a3=9,a4=10 print(a1,a2,a3,a4) func(11,22) # 不給a3,a4傳值,則a3,a4等於默認參數 func(11,22,10) func(11,22,10,100) func(11,22,10,a4=100) func(11,22,a3=10,a4=100) func(11,a2=22,a3=10,a4=100) func(a1=11,a2=22,a3=10,a4=100)
*args
能夠接受任意個數的位置參數,並將參數轉換成元組。
def func(*args): print(*args) func(1,2) ==> (1,2) func(1,2,[12,3,4]) ==> (1,2,[12,3,4]) func((11,22,33)) ==> ((11,22,33)) # 參數是一個元組,打印出來的效果是元組套元組。
調用函數有*
def func(*args): print(*args) func(*(11,22,33)) ==>(11,22,33) # *是用來打散元組的,將元組中的每一個元素做爲參數。 func(*[11,22,33]) ==>(11,22,33) # *能夠用來打散列表/元組 /字典/集合,只是循環內部元素
只能用位置傳參
def func(*args): print(args) func(1) func(1,2) # args=(1, 2) func((11,22,33,44,55)) # args=((11,22,33,44,55),) func(*(11,22,33,44,55)) # args=(11,22,33,44,55)
**kwargs
能夠接受任意個數的關鍵字參數,並見參數轉換成字典
調用函數無*
def func(**kwargs): print(***kwargs) func(k=1) **kwargs = {'k':1} func(k1=1,k2=3) **kwargs = {'k1':1,'k2':3}
調用函數有*
def func(**kwargs): print(**kwargs) func(**{'k1':1,'k2':4,'k3':9}) **kwargs = {'k1':1,'k2':4,'k3':9}
只能用關鍵字傳參
*args/**kwargs綜合使用:無敵 + 無敵 => 真無敵
def func(*args,**kwargs): print(args,kwargs) func(1,2,3,4,5,k1=2,k5=9,k19=999) *arg = (1,2,3,4,5) **kwargs = {'k1':2,'k5':9,'k19':999} func(*[1,2,3],k1=2,k5=9,k19=999) *arg = (1,2,3) **kwargs = {'k1':2,'k5':9,'k19':999} func(*[1,2,3],**{'k1':1,'k2':3}) *arg = (1,2,3) **kwargs = {'k1':1,'k2':3} func(111,222,*[1,2,3],k11='alex',**{'k1':1,'k2':3}) *arg = (111,222,1,2,3) **kwargs = {'k11':'alex','k1':1,'k2':3}
定義函數
def func(a1,a2): pass def func(a1,a2=None): # 對於默認值,不可變類型隨便寫,若是是可變類型(有坑)。 pass def func(*args,**kwargs): pass
調用函數
位置參數在前,關鍵字參數在後。
在python文件中:
py文件:全局做用域
函數:局部做用域
a = 1 def s1(): x1 = 666 print(x1) print(a) print(b) b = 2 print(a) s1() a = 88888 def s2(): print(a,b) s1() s2()
每一個做用域中的數據只有做用域本身能夠調用,若是做用域中調用的數據沒有,能夠調用全局做用域的
全局做用域只能調用全局的
在全局做用域中的函數能夠互相調用(調用已經存在的),但不能夠直接調用做用域中的做用域
總結:
1.一個函數就是一個做用域
2.做用域中查找數據規則:優先在本身的做用域找數據,本身沒有就去「父級」-->「父級」-->直到全局,全局沒有就報錯。 (做用域的嵌套)
注意:父級做用域中的值究竟是多少?
x = 10 def func(): x = 9 print(x) func()
課上練習題
x = 10 def func(): x = 9 print(x) def x1(): x = 999 print(x) func() x = 10 def func(): x = 9 print(x) def x1(): x = 999 print(x) x1() func() x = 10 def func(): x = 9 print(x) def x1(): x = 999 print(x) print(x) x1() func() x = 10 def func(): x = 8 print(x) def x1(): x = 999 print(x) x1() print(x) func() x = 10 def func(): x = 8 print(x) def x1(): print(x) x1() print(x) func() x = 10 def func(): x = 8 print(x) def x1(): print(x) x = 9 x1() x = 10 print(x) func() x = 10 def func(): x = 8 print(x) def x1(): print(x) x1() x = 9 x1() x = 10 print(x) func()
3.子做用域中只能只能找到父級中的值,默認沒法從新爲父級的變量進行賦值。
不能進行賦值,只能對可變類型進行內部修改
# ##################### name = 'oldboy' def func(): name = 'alex' # 在本身做用域再建立一個這樣的值。 print(name) func() print(name) # ##################### name = [1,2,43] def func(): name.append(999) print(name) func() print(name)
若是非要對全局的變量進行賦值須要加global(強制賦值)
#示例一 name = "老男孩「 def func(): global name name = 'alex' func() print name # 示例二 name = ["老男孩",'alex'] def func(): global name name = '我' func() print(name) # 示例三 name = "老男孩" def func(): name = 'alex' def inner(): global name name = 999 inner() print(name) func() print(name)
對父級的變量賦值用nonlocal,先找到父級的變量再進行賦值 (強制賦值)
name = "老男孩" def func(): name = 'alex' def inner(): nonlocal name # 找到上一級的name name = 999 inner() print(name) func() print(name)
補充:全局變量必須所有要大寫
USER_LIST = [11,22,3] def func(): name = 'asdf' USER_LIST.append(12) USER_LIST.append(name) func() print(USER_LIST)