[TOC]
>[success] # 函數 def
~~~
1.函數:對功能的封裝,和為了讓代碼可以復用,它是命名的用于區分的代碼段。函
數可以接受任何類型參數,并且有返回。
2.定義函數: def、函數名、帶有函數參數的圓括號,最后緊跟 一個冒號(:),例如:
def 函數名(形參):
函數體
3.函數命名規范和變量命名一樣(必須使用字母或者下劃線 _ 開頭,僅能含 有字
母、數字和下劃線)
4.調用函數:函數名(實參)
5.pass:Python 函數中的 pass 表明函數沒有做任何事情
~~~
>[danger] ##### 關于return 和 None
* return
~~~
1. return, 函數執行完畢. 不會執行后面邏輯
2. 如果函數中不寫return返回None
3. 只寫return 返回None
4. return 返回值. 返回一個值
5. return 值1, 值2,... 返回多個值. 調用方接收到的是元組
~~~
* None
~~~
1.None 是 Python 中一個特殊的值,雖然它不表示任何數據,但仍然具有重要的
作用。 雖然 None 作為布爾值和 False 是一樣的,但是它和 False 有很多差別。
2.案例解釋 實際判斷None 用is來做判斷:
thing = None
if thing:
print("等同True")
else:
print("等同False")
# 實際使用用is
if thing is None:
print("is 是None")
打印結果:
等同False
is 是None
3.這雖然是一個微妙的區別,但是對于 Python 來說是很重要的。你需要把 None
和不含 任何值的空數據結構區分開來。0 值的整型 / 浮點型、空字符串('')、空
列表([])、 空元組((,))、空字典({})、空集合(set())都等價于 False,但
是不等于 None。
4.更好的區分案例
def is_none(thing):
if thing is None:
print("是None")
elif thing:
print("是true")
else:
print("是False")
>>> is_none(None) It's None
>>> is_none(0.0) It's False
>>> is_none(()) It's False
~~~
>[danger] ##### 參數
~~~
1.在創建函數聲明的參數叫形參,調用使用的叫實參
2.位置參數傳 入參數的值是按照順序依次復制過去的。列子:def menu(wine, entree, dessert):
3.關鍵字參數 為了避免位置參數帶來的混亂,調用參數時可以指定對應參數的名
字,例子: menu(entree='beef', dessert='bagel', wine='bordeaux')
4.位置參數和關鍵字參數的使用,先定義位置參數,在定義關鍵字參數,例子:
menu('frontenac', dessert='flan', entree='fish')
5.動態參數:位置參數的動態參數: *args,關鍵字參數的動態參數 : **kwargs
6.*arg 是在形參定義是為了接受實參中不確定個數使用,接受回來的是一個元組
在函數中調用*arg 是將內容元組解包后的采納數展示,arg是元組形式展示。
7.**kwargs 在形參定義接受鍵值對形式的參數并且變成字典,在實參的使用方式
例子:(wine='merlot', entree='mutton', dessert='macaroon') ,函數中只能直接使
用kwargs不能加**,kwargs 直接就是一個字典形式
8.位置參數 > *args > 默認值 > **kwargs 例子:def func(a, b, c, *args, d = 5, **kwargsd)
使用效果func(1,2,3,4,5,6,7, d ="馬大哈"),d是將默認差數從5變成馬大哈.
~~~
>[danger] ##### 函數的命名空間
~~~
命名空間分類:
1. 全局命名空間--> 我們直接在py?文件中, 函數外聲明的變量量都屬于全局命名空間
2. 局部命名空間--> 在函數中聲明的變量量會放在局部命名空間
3. 內置命名空間--> 存放python解釋器為我們提供的名字, list, tuple, str, int這些都是內 置命名空間
加載順序:
1. 內置命名空間
2. 全局命名空間
3. 局部命名空間(函數被執?行行的時候)
取值順序:
1. 局部命名空間
2. 全局命名空間
3. 內置命名空間
~~~
>[danger] ##### 函數的作用域
~~~
a = 10 # 全局
def func():
a = 20 # 局部
print(a) # 就近原則
print(globals()) # globals() 獲取到全局作用域(內置,全局)中的所有名字
print(locals()) # locals() 查看當前作用域中的所有名字
func()
1. 全局 也就是所有函數都能使用,局部函數內部自己使用其他函數無法使用,
遵循就近原則
2.globals() 獲取到全局作用域(內置,全局)中的所有名字
3.locals() 查看當前作用域中的所有名字
4.在函數定義,global a -- a 不再是局部變量. 是全局變量
5.在函數定義,nonlocal a -- a 找局部作用域中 離他最近的那個變量引入進來
~~~
>[danger] ##### 函數嵌套案例
~~~
def fun():
a = 1
print(a)
def fun2():
a = 2
print(a)
fun2()
print(a)
fun()
打印結果(fun2 雖然變量也叫a 但是不會改變fun中的a,證明作用域在自身起作用):
1
2
1
~~~
>[danger] ##### python 和 js 函數作用域區別
* js 可以在函數內改變 var 聲明的全局作用域
~~~
var a = 12;
function c(){
a +=1;
console.log(a);
}
c();
打印結果:
13
~~~
* python 不可以更改全局作用域的變量,但可以使用
~~~
a = 1
def c():
print(a) # 可以使用全局作用域的a
# def b():
# a = a+1
# print(a) # 報錯
def e():
global a # 可以使用global 引入全局
a += 1
print(a)
c()
e()
print(a)
打印結果:
1
2
2
~~~
- PYTHON-- 基礎
- Python -- 變量、常量、注解
- 算數\比較\賦值\邏輯運算符
- Python -- input 控制臺用戶輸入
- Python -- 流程控制/循環語句
- Python -- 切片
- Python -- 數據類型
- 基礎數據類型
- int -- 數字類型
- str -- 字符類型
- bool -- 布爾類型
- list -- 列表
- type -- 元祖
- dict -- 字典
- set -- 集合
- Python -- 深淺copy
- Python -- 文件的讀寫
- Python -- 函數
- 函數 -- 做參數使用
- 函數 -- 閉包
- 函數 -- 生成器
- 函數 -- 列表推導式
- 案例
- 基礎案例一
- 基礎案例二
- 基礎案例三
- COOKBOOK
- LIST、STR、DICT、TUPLE
- LIST - 列表方法總結
- 一、序列拆分成單獨變量
- 二、* 妙用
- 三、deque- 雙向隊列
- 四、求找到最大或最小的N個元素
- 4.1 heapq-- 簡單使用
- 五、去重并保持列表順序不變
- 六、切片slice
- 七、counter 統計序列中元素次數
- 八、itemgetter 列表套著字典排序
- 九、處理大量的列表數據
- 十、隨機事件處理列表
- DICT - 字典的總結方法
- 一、defaultdict 解決 KeyError
- 二、OrdereDict有序字典
- 三、zip 和 max/min 比較
- IDCT和LIST- 推導式
- 一、LIST 推導式
- 二、字典推到式
- TUPLE-元組
- 一、命名元組
- STR-字符串
- 一、常見的字符串方法
- 二、字符串拆分
- 三、字符串的位置匹配
- 四、字符串替換
- 五、正則大小寫/換行匹配
- 六、對字節類型處理
- 數字、日期、時間處理
- 一、數字的處理
- 二、時間換算
- 2.1 時間運算
- 2.2計算某一時刻上周幾的日期
- 2.2對時間轉換格式優化
- 迭代器和生成器
- 一、iter 迭代器 使用案例
- 二、生成器 yeild
- 三、構建一個反向迭代方法
- 四、實現反正函數構造
- 五、迭代對象切片/跳過元素
- 六、迭代出所有的組合排列
- 七、索引-值迭代序列化
- 八、zip 同時迭代多個序列
- 九、同時循環多個可迭代對象
- 十、yield from 遞歸案例
- 十一、合并序列,并按順序輸出
- 十二、使用 iter 替代 while True
- 操作文件
- 一、處理文件路徑
- 二、檢測文件/獲取文件信息
- 函數
- 一、函數基本案例使用
- 二、匿名函數
- 三、回調函數
- 四、閉包實現一個單個方法類
- 五、函數嵌套回調函數
- 類與對象
- 一、str/repr--讓類字符串表示
- 二、format -- 格式化類的內容
- 三、with -- 上下文管理類
- 四、創建節省內存的類
- 五、將類里面方法變成屬性
- 六、調用父類方法
- 七、擴展子類中的屬性
- 八、創建新的類或者實類屬性
- 九、簡化數據結果,簡化init
- 十、python 接口寫法
- 十一、通過類屬性創建委托訪問
- 十二、__new__重新初始化init
- 十三、通過字符串調用類
- 元編程
- 一、裝飾器
- 1.1 去掉裝飾器修飾
- 1.2 可接受參數裝飾器
- 1.3利用裝飾器對函數參數類型檢查
- 1.4編寫類裝飾器
- 1.5為類方法和靜態方法加裝飾器
- 1.6通過裝飾器給裝飾函數加參數
- 線程和進程