第三章 函式程式設計

2021-10-10 12:33:43 字數 3768 閱讀 9802

函式是一段具有特定功能的、可重用的語句組,用函式名來表示並通過函式名進行功能呼叫。函式也可以看作是一段具有名字的子程式

特性:

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...

程式設計珠璣第三章

第三章寫的有點太簡單了,可能作者是想在後面章節裡再詳細說吧!這一章就是作者說的幾句話印象還是很深刻。程式設計師在節省空間方面無計可施時,將自己從 中解脫出來,退回起點並記者並集 中精力研究資料,常常能有奇效。資料的 表示形式是程式設計的根本。正如人月神話的作者說 只要給我你設計的表,我就對你的程式一...