python函數,變量,序列解包

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)

(備註:以上內容來自七月老師的學習筆記,僅作爲學習使用)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章