-----------耐得住寂寞,守得住芳華.
# # -------------------------------[day10作業及默寫]-------------------------------------#
# 1,繼續整理函數相關知識點,寫博客。
# 1. 動態傳參
# 形參:
# 1. 位置參數
# 2. 默認值參數
# 3. 動態傳參
# 1 *args: 動態接收位置參數
# 2 **kwargs:動態接收關鍵字參數
# 順序: 位置, *args, 默認值, **kwargs
#
# *, **:
# def func(*args, **kwargs): 無敵傳參
# pass
# *, ** 在形參位置: 聚合
# 在實參位置: 打散
# 實參:
# 1. 位置參數
# 2. 關鍵字參數
# 3. 混合參數
#
# 2. 名稱空間和作用域
# 名稱空間: 保存名字用的
# 變量, 函數, 類
#
# 1. 內置名稱空間:python自己, print, input, len
# 2. 全局名稱空間: 你寫的代碼從上到下
# 3. 局部名稱空間: 函數, 類, 方法, 其他模塊, 對象
#
# 作用域
# 全局作用域
# 內置 + 全局
# 局部作用域
# 局部名稱空間
# 從局部找全局可以. 但是從全局找局部是不可以的
#
# globals() 查看全局作用域中的名字
# locals() 查看當前作用域中的名字
#
# 3. 函數的嵌套(難點)
# 每一層都會產生獨自的名稱空間
# 4. nonlocal global
# global: 在局部引入全局的內容, 可以升華一個變量為全局變量
# nonlocal : 在局部, 引入上一層名稱空間中的變量, 如果沒有, 繼續上一層......
# # ---------------------------------------------------------------------------------#
# 2,寫函數,接收n個數字,求這些參數數字的和。(動態傳參)
#[方法一]
# def func(*args):
# sum = 0
# for i in args:
# sum += i
# return sum
# print(func(55,66))
#[方法二]
# def func(*args):
#
# return sum(args)
#
# print(func(55,66,11))
# # ---------------------------------------------------------------------------------#
# 3,讀代碼,回答:代碼中,打印出來的值a,b,c分別是什么?為什么?
# a = 10
# b = 20
#
# def test5(a, b):
# print(a, b)
# c = test5(b, a)
# print(c)
# 20*10*(none)
# # ---------------------------------------------------------------------------------#
# 4,讀代碼,回答:代碼中,打印出來的值a,b,c分別是什么?為什么?
# a = 10
# b = 20
#
# def test5(a, b):
# a = 3
# b = 5
# print(a, b)
#
# c = test5(b, a)
# print(c)
# print(a, b)
# 5*3*(none)*10*20
# ---------------------------------------------------------------------------------#
# 5,寫函數,傳入函數中多個實參(均為可迭代對象如字符串,列表,元祖,集合等),
# 將每個實參的每個元素依次添加到函數的動態參數args里面.
# 例如 傳入函數兩個參數[1,2,3] (22,33)最終args為(1,2,3,22,33)
# def func(*args):
# print(args)
# s = func(*[1,2,3],*(22,33))
# print(s)
# # ---------------------------------------------------------------------------------#
# 6,寫函數,傳入函數中多個實參(實參均為字典),將每個實參的鍵值對依次添加到函數的動態參數kwargs里面.
# 例如 傳入函數兩個參數{‘name’:’alex’} {‘age’:1000}最終kwargs為{‘name’:’alex’ ,‘age’:1000}
# 7, 下面代碼成立么?如果不成立為什么報錯?怎么解決?
# 7.1
# a = 2
# def wrapper():
# print(a)
# wrapper()
# 成立 ---> 2
# # ---------------------------------------------------------------------------------#
# 7.2
# a = 2
# def wrapper():
# # a =2 # /*<--加入此行-->*/
# a += 1
# print(a)
# wrapper()
# 不成立 ,修改如上
# ---------------------------------------------------------------------------------#
# 7
# def wrapper():
# a = 1
# def inner():
# print(a)
# inner()
# wrapper()
#成立 ---> 1
# ---------------------------------------------------------------------------------#
# 7.4
# def wrapper():
# a = 1
# def inner():
# # a =2 # /*<--加入此行-->*/
# a += 1
# print(a)
# inner()
# wrapper()
#不成立 修改如上
# # ---------------------------------------------------------------------------------#
# 8,寫函數,接收兩個數字參數,將較小的數字返回.
# def small(a,b):
# c=b if a>b else a
# print(c)
# small(15,16)
# # ---------------------------------------------------------------------------------#
# 9,寫函數,傳入n個數,返回字典{‘max’:最大值,’min’:最小值}
# 例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}
# (此題用到max(),min()內置函數)
# dic = {"max":[],"min":[]}
# def max_min(lst):
# for i in lst:
# if i == max(lst):
# dic["max"].append(i)
# elif i == min(lst):
# dic["min"].append(i)
# return dic
# lst=[1,8,9,520,5,2,3,4,0,-1314,6,6,5]
# max_min(lst)
# print(dic)
# # ---------------------------------------------------------------------------------#
# 10,寫函數,傳入一個參數n,返回n的階乘
# 例如:cal(7) 計算7*6*5*4*3*2*1
# def factorial(n): # factorial-->階乘
# if n == 0:
# print("結果為0")
# else:
# multi = 1 # multiplication -->乘法
# for i in range(1,n+1):
# multi = multi*i
# print(multi)
# factorial(10)
# 1的階乘:1
# 2的階乘:2
# 3的階乘:6
# 4的階乘:24
# 5的階乘:120
# 6的階乘:720
# 7的階乘:5040
# 8的階乘:40320
# 9的階乘:362880
# 10的階乘:3628800
# # ---------------------------------------------------------------------------------#
# 11寫函數,返回一個撲克牌列表,里面有52項,每一項是一個元組
# 例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
# def puker():
# lis = []
# lst_color = ["黑桃", "紅桃", "梅花", "方塊"]
# lst = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
# for i in lst_color:
# for j in lst:
# lis.append((i,j))
# print(lis)
# puker()
# # ---------------------------------------------------------------------------------#
# # 12 有如下函數:
# def wrapper():
# def inner():
# print(666)
# wrapper()
#
# # [方法一]
# def wrapper():
# def inner():
# print(666)
# inner()
# wrapper()
#
# # [方法二]
# def wrapper():
# def inner():
# print(666)
# return inner
# wrapper()()
# 你可以任意添加代碼,用兩種或以上的方法,執行inner函數.
#
# # ---------------------------------------------------------------------------------#
# 明日默寫:
# 1,形參的接收順序。
# 2,什么是命名空間,什么是全局名稱空間,什么是局部名稱空間,什么是內置名稱空間。
# 3,什么是全局作用域,什么是局部作用域。
# 4,名稱空間的加載順序,取值順序。
# 5,解釋一下什么是global,什么是nonlocal。