1.函數特點 c1.py
# 函數
# 特點
# 1.功能性
# 2.隱藏細節
# 3.避免編寫重複的代碼
# round(需要取近似值的數,精確到第幾位)
a = 1.236
print(round(a,2))
# 通過help 查看函數功能
# 在命令行中輸入 python 回車
# 通過help(round) 回車 查看
# 可以在命令行中輸入 import this 查看python之禪
2.函數形式 c2.py
def funcname(parameter_list):
pass
# 1.參數列表可以沒有
# 2.return value (若存在則爲value,不存在則爲none)
# practice1:(1)實現兩個數字的相加;(2)打印輸入的參數
#最大遞歸次數
# import sys
# sys.setrecursionlimit(50)
# 函數名儘量避免和系統的函數名同名
def add(x,y):
# 形參:形式參數
result = x + y
return result
def print_code(code):
print(code)
a = add(1,2) #實參:實際參數
# b = print_code("python: ")
# 這裏打印a有值,b爲none(在print_code只是調用了系統的print函數,並沒有將code進行return,所以爲默認的none)
# print(a,b)
# 下邊的方法就會導致,超過最大遞歸調用次數,
# 定義的print函數,會調用內部的print函數,內部的print函數又會調用自己的print函數
# 一直自己調用自己,就會遞歸調用,從而超過最大遞歸調用深度
# def print(code):
# print(code)
# print(a)
3.序列解包 c3.py
def damage(x,y):
damage1 = x*3
damage2 = y*2 +10
return damage1,damage2
damages = damage(3,6)
# 序列解包
# 使用有意義的變量名,增強見名知意
skill1_damages,skill2_damages = damage(3,6)
print(type(damages))
print(damages)
print(skill1_damages,skill2_damages)
4. c4.py
# 序列解包
# a = 1
# b = 2
# c = 3
# print(a,b,c)
# d,e,f = 1,2,3
# print(d,e,f)
# g爲一個元組,進行序列解包
# g = 1,2,3
# h,i,j = g
# print(h,i,j)
# a = 1
# b = 1
# c = 1
a=b=c=1
print(a,b,c)
5.函數參數 c5.py
# 函數參數
#1.必須參數(在函數定義時傳入的參數。即下例中的x和y)
def add(x,y):
pass
#2.關鍵字參數(在傳參時,不必考慮參數的順序,通過關鍵字的方式,指定參數的賦值。例如下例中的方式),優點:增強了代碼的可讀性
add(y=2,x=1)
#3.默認參數(參考c6.py)
# (1)優點:
# 使用比較方便,當參數個數比較多時(假設參數6個,有3個是變的,3個是變的,就可使用默認參數,傳變的即可)
# (2)注意點
# ①必須參數統一寫在前邊,默認參數寫在後邊(python 的語法規範)
# ②如果未使用關鍵字參數,則必須按照順序進行;如果使用了關鍵字參數可以按照屬性進行(參考c6.py)
# ③在使用時,默認值參數和必須參數不能混雜使用(和定義時是一樣的),會報錯(參考c6.py第18行)
#4.可變參數
# 當出現了,必須參數,*param時,默認參數,必須按照這個順序
def demo(param1, *param, param2 = 2):
print(param1)
print(param)
print(param2)
# a = (1,2,3,4,5)
# *a:就是將a中的元素進行平鋪(就和es6中的三個點的作用一樣)
# 這種比較複雜的參數列表不太可取,在涉及之初就應該保證參數列表儘可能簡單
demo('a',1,2,3,4,param2 = 'param2')
6. c6.py
# 默認參數,如果沒有設置默認參數,須要在使用傳入
# 默認 參數都放後邊(寫在一起),不能和必須參數間隔使用
# 如果沒有特殊說明,形參和實參是按照傳入的順序進行一一對應的;如果涉及變化順序的,可使用關鍵字參數進行標明傳入的是哪個參數
def print_student_infor(name,old = 18,gender = '男',school = '人民路小學'):
print('我是' + name)
# 數字和字符串不能強制相加,須要先轉類型,再相加
print('我今年'+ str(old))
print('我是' + gender +'生')
print('我在' + school +'上學')
print_student_infor('雞小萌',18,'男','人民路小學')
print('~~~~~~~~~~~~~~~~~~~')
print_student_infor('雞小萌')
print('~~~~~~~~~~~')
print_student_infor('石敢當')
print('~~~~~~~~~~~')
print_student_infor('喜小樂',16,'女')
print('~~~~~~~關鍵字參數~~~~~~~~~')
print_student_infor('果果',school='光明小學',old=14,gender='女')
print('~~~~~~~必須參數和默認參數混合使用會報錯~~~~~~~~~')
# 不能進行混雜間隔使用
# print_student_infor('果果',old=14,'女',school='光明小學')
7. c7.py
def demo(param1, *param, param2 = 2):
print(param1)
print(param)
print(param2)
# a = (1,2,3,4,5)
# *a:就是將a中的元素進行平鋪(就和es6中的三個點的作用一樣)
# demo('a',*a,param2 = 'param2')
# *a:將每個數值分開傳入,如果再以元祖的方式傳入,那麼到內部就變成了二維的元祖了
# demo('a',(1,2,3,4),param2 = 'param2')
# 這種比較複雜的參數列表不太可取,在涉及之初就應該保證參數列表儘可能簡單
demo('a',1,2,3,4,param2 = 'param2')
8. 求平方和 c8.py
# 求任意個數的數值的平方和
# 在Python中for循環是不能形成一個作用域,函數時可以形成一個作用域的
def squsum(*param):
sum = 0
for i in param:
sum += i*i
print(sum)
squsum(1,2,3)
9. 關鍵字參數 c9.py
# 關鍵字參數
# 打印不同城市的溫度
# 這裏須用兩個**;**param
def city_t(param1,**param):
print(param)
# items 是 param 的內置方法
for key,value in param.items():
print(key+':'+value)
a = {'nj':'20c','sh':'30c'}
# 這裏只傳入param1,所以param爲空{},也不會報錯
city_t(1)
city_t(1,**a)
10. 變量作用域 c10.py
# 變量的作用域
# 對於函數外部定義一個變量,是全局的,在函數內部可以打印出來
# 但在函數內部定義一個變量,在函數外部是不能打印出來的
c = 50 #全局作用域
def add(x,y):
c = x + y #局部作用域
print(c)
add(1,2)
print(c)
11. c11.py
# 局部變量只是一個相對的概念,例如在函數內部定義一個變量cc,
# 然後再在循環內執行 +i 操作,最終打印cc
# 在for循環外部是可以引用for循環內部的變量的例如 aa
# 在for循環內部也可使用for循環外部的cc
def demo():
cc = 0
# 塊級作用域(在Python中,for循環不存在塊級作用域)
# 所以在for循環外部是可以訪問,for循環內部的 aa 變量的
for i in range(0,9):
aa = 'a'
cc +=i
print(aa)
print(cc)
demo()
12. c12.py
# 優先使用局部變量
c = 1
def demo():
c = 2
def fun():
c = 3
print(c)
fun()
# 鏈式,作用域鏈
demo()
13. c13.py
# 全局變量
# 在函數的內部定義一個變量,在函數外部進行訪問
def demo():
global c
c = 1
demo()
print(c)
14. c14.py
import c13
print(c13.c)
(備註:以上內容來自七月老師的學習筆記,僅作爲學習使用)