函式是一段具有特定功能的、可重用的語句組,用函式名來表示並通過函式名進行功能呼叫。函式也可以看作是一段具有名字的子程式
特性:
1.減少重複**
2.使程式變的可擴充套件
3.使程式變得易維護
語法定義
def sayhi():#函式名
print("hello, i'm nobody!")
sayhi() #呼叫函式
可以帶引數
def calc(x,y):
res = x**y
return res #返回函式執行結果
c = calc(a,b) #結果賦值給c變數
print(c)
引數可以讓你的函式更靈活,不只能做死的動作,還可以根據呼叫時傳參的不同來決定函式內部的執行流程
形參變數
只有在被呼叫時才分配記憶體單元,在呼叫結束時,即刻釋放所分配的記憶體單元。因此,形參只在函式內部有效。函式呼叫結束返回主呼叫函式後則不能再使用該形參變數
實參
可以是常量、變數、表示式、函式等,無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳送給形參。因此應預先給實參賦值
預設引數
看如下**
def stu_register(name,age,country,course):
print("----註冊學生資訊------")
print("姓名:",name)
print("age:",age)
print("國籍:",country)
print("課程:",course)
stu_register("王山炮",22,"cn","python_devops")
stu_register("張**",21,"cn","linux")
stu_register("劉老根",25,"cn","linux")
發現 country 這個引數 基本都 是」cn」, 就像我們在**上註冊使用者,像國籍這種資訊,你不填寫,預設就會是 中國, 這就是通過預設引數實現的,把country變成預設引數非常簡單
def stu_register(name,age,course,country="cn"):
這樣,這個引數在呼叫時不指定,那預設就是cn,指定了的話,就用你指定的值。
另外,你可能注意到了,在把country變成預設引數後,我同時把它的位置移到了最後面,為什麼呢?關鍵引數
正常情況下,給函式傳引數要按順序,不想按順序就可以用關鍵引數,只需指定引數名即可(指定了引數名的引數就叫關鍵引數),但記住乙個要求就是,關鍵引數必須放在位置引數(以位置順序確定對應關係的引數)之後
def stu_register(name, age, course='py' ,country='cn'):
print("----註冊學生資訊------")
print("姓名:", name)
print("age:", age)
print("國籍:", country)
print("課程:", course)
呼叫可以這樣
stu_register("王山炮",course='py', age=22,country='jp' )
但絕不可以這樣
stu_register("王山炮",course='py',22,country='jp' )
當然這樣也不行
stu_register("王山炮",22,age=25,country='jp' )
這樣相當於給age賦值2次,會報錯!
注意,引數優先順序順序是 位置引數》關鍵引數
非固定引數
若你的函式在定義時不確定使用者想傳入多少個引數,就可以使用非固定引數
def stu_register(name,age,*args): # *args 會把多傳入的引數變成乙個元組形式
print(name,age,args)
stu_register("alex",22)
#輸出#alex 22 () #後面這個()就是args,只是因為沒傳值,所以為空
stu_register("jack",32,"cn","python")
#輸出# jack 32 ('cn', 'python')
還可以有乙個**kwargs
def stu_register(name,age,*args,**kwargs): # *kwargs 會把多傳入的引數變成乙個dict形式
print(name,age,args,kwargs)
stu_register("alex",22)
#輸出#alex 22 () {}#後面這個{}就是kwargs,只是因為沒傳值,所以為空
stu_register("jack",32,"cn","python",***="male",province="shandong")
#輸出# jack 32 ('cn', 'python')
深淺copydict ,list,sets =
s2 = a ,此時s2和s是共享的同乙份資料的
copy乙份資料
淺copy,只copy第一層
s2 = s.copy
深copy copy多層(import copy)
# coding=utf-8
# s = {}
# print(s)
# 列表、字典,集合都有copy方法
s =
}print(s)
s2 = s
print(s2)
print(id(s))
print(id(s2))
s2["name"] = "金角大王"
print(s)
print(s2)
s3 = s.copy()
print(s3)
s3["name"] = "黑姑娘"
print(s3)
print(s2)
print(s)
print(s3["scores"]["語文"])
s3["scores"]["語文"] = 29
print(s3)
print(s2)
print(s)
import copy
s4 = copy.deepcopy(s) # 深copy
print(s4)
s4["scores"]["語文"] = 10
print(s4)
print(s)
C 程式設計 第三章 函式
int r i r為i的引用1 定義引用的時候必須初始化,使其指向乙個存在的物件 2 一旦定義以後就與物件繫結,不允許修改 3 當用引用作為函式的引數時,其效果和用指標作為函式引數的效果相當,此時函式中對形參的各種操作實際上是對實參本身進行操作,而非簡單的將實參變數或物件的值拷貝給形參 4 使用引用...
第三章 函式
函式是模組劃分的基本單位,是對外處理的一種抽象 c和c 的子程式體現為函式 呼叫其他函式的被稱為主函式 被其他行數呼叫的稱為被調函式 函式的語法形式 型別說明符 函式名 含型別說明的形式參數列 語句序列 形式引數 形式參數列 簡稱形參 表的內容如下 type1 name1,type2 name2,t...
程式設計珠璣第三章
第三章寫的有點太簡單了,可能作者是想在後面章節裡再詳細說吧!這一章就是作者說的幾句話印象還是很深刻。程式設計師在節省空間方面無計可施時,將自己從 中解脫出來,退回起點並記者並集 中精力研究資料,常常能有奇效。資料的 表示形式是程式設計的根本。正如人月神話的作者說 只要給我你設計的表,我就對你的程式一...