Python基礎知識3

2021-08-27 18:50:01 字數 4575 閱讀 3615

程式語言中函式定義:函式是邏輯結構化和過程化的一種程式設計方法。先定義乙個數函式,然後按照這個數學模型用程式語言去實現它。

def test(x):

"the function definitions"

x+=1

return x

#def :定義函式的關鍵字

#test:函式名

#():內可定義形參

#"": 文件描述

#x+=1:函式體,泛指**塊或程式處理邏輯

#return:定義返回值

#**的重複利用

#列印日誌及時間

import time

def logger():

time_format='%y-%m-%d %x'

time_current=time.strftime(time_format)

with open('a.txt','a+') as f:

f.write('%s end ation\n' %time_current)

def text1():

print('in the text1')

logger()

def text2():

print('in the text2')

logger()

def text3():

print('in the text3')

logger()

text1()

text2()

text3()

函式返回值:

返回值為0:返回none

返回值為1:返回object

為什麼要有返回值:

後面的其他程式邏輯需要根據返回值的結果來進行不同的操作

def hanshu():

return 5,6,'sss',['r','t']

m=hanshu()

#結果返回 :

5,6,'sss',['r','t']

形參:形式引數,不是實際存在的,是虛擬變數。在定義函式和函式體的時候使用形參,目的是在函式呼叫時接收實參,實參個數,型別與實參相對應

實參:實際引數,呼叫函式時傳給函式的引數,可以是常量,變數,表示式,函式,傳給形參

區別:形參是虛擬的,不占用記憶體空間,形參變數只要在被呼叫時才分配記憶體單元,實參是乙個變數,占用記憶體空間,資料傳輸單向,實參傳給形參,不能形參傳給實參。

關鍵字引數是不能寫在位置引數前面

def test(x,y):

print(x)

print(y)

test(y=2,x=1)#與形參順序無關關鍵字呼叫

test(1,2) #與形參一一對應,位置呼叫

#關鍵子呼叫和位置一起呼叫,按照位置的來,關鍵字引數是不能寫在位置引數前面

預設引數特特點:

呼叫函式時,預設引數非必須傳遞

用途:1 預設安裝值

2引數組:

引數個數不固定,可接收多個實參

*args接收n個位置引數,轉換成元組形式

def text(*args)

test(1,2,3,4,5)

或者test(*[1,2,3,4,5])#args=tuple([1,2,3,4,5])

def test(x,*args)

接收字典:

功能,**kwargs 把n個關鍵字引數轉換成字典的方式

def test2(kwargs):

print(kwargs)

test2(name=『ss』,age=1,***=『n』) #關鍵字引數

test2(name=『aa』,age=5,***=『s』)

test2(

def test2(**kwargs):

print(kwargs)

print(kwargs['name'])

print(kwargs['***'])

print(kwargs['age'])

test2(name='aa',***='d',age =4)

#跟位置引數一起呼叫

def test3(name,**kwargs):

print(name)

print(kwargs)

test3('bb') #不需要指定後面的返回值: bb {}

test3('cc',s='3')

#跟預設引數一起

def test4(name,age=1,**kwargs): #引數組一定放到最後 def test4(name,**kwargs,age=1)錯誤寫法

print(name)

print(age)

print(kwargs)

test4('dd',***='v',data='ee')

test('dd',3,***='v',data='ee')

def test5(name.age=3,*args,**kwargs):

print(name)

print(age)

print(kwargs)

print(args)

test('dd',age=3,***='v',data='ee',s=33)

區域性變數和全域性變數:

區域性變數:只在函式體內生效,這個函式就是這個變數的作用域,然後釋放,只是針對字元,數字,變數是集合,字典,陣列中是可以改變的

全域性變數:在函式體內是改變不了的,如果硬改: global 加上這個關鍵字 在函式體內改乙個全域性變數,程式都呼叫這個函式,變數,不容易找到出錯區

遞迴 :在函式內部,可以呼叫其他函式,如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式

遞迴特性:

1 必須有乙個明確的結束條件

2 每次進入更深一層遞迴時,問題規模相比上次遞迴夠應有所減少

3 遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧這種資料結構實現,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式

返回,棧就會減一層棧幀,由於棧的大小不適宜無限的,所以遞迴呼叫的次數過多會導致棧溢位

ef calc(n):

print(n)

if int(n/2)==0:

return n

return calc(int(n/2))

calc(10)

匿名函式:不需要顯式的指定函式,主要是和其他函式搭配使用

#原求值幾次方

def locals(n):

return n**n

print(locals(10))

#改為匿名函式

locals=lambda n:n**n

print(locals(10))

#搭配使用

res=map(lambda x:x**2,[1,3,7,4,8])

for i in res:

print(i)

函式式程式設計:

函式是python內建支援的一種封裝,我們通過把大段**拆成函式,通過一層一層的函式呼叫,就可以把複雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程式設計。函式就是面向過程的程式設計的基本單元。

函式式程式設計,可以歸結到買你想過程的程式設計,但是其思想更接近數學計算

在計算機的層次上,cpu執行的是加減乘除的指令**,以及各種條件判斷和跳轉指令,所以組合語言是最貼近計算機語言

計算則是數學意義上的計算,越是抽象的計算,離計算機硬體越遠

『對應到程式語言,就是越低階的語言,越貼近計算機。抽象程度低,執行效率高,比如c語言,越高階的語言越貼近計算,抽象程度越高,執行效率越低,比如isp語言

函式式程式設計就是抽象程度很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式我們稱之為沒有***,而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到不同的輸出結果,因此,這種函式是有***的。

函式式程式設計中的函式這個術語不是指計算機中的函式(實際上是subroutine),而是指數學中的函式,即自變數的對映。也就是說乙個函式的值僅決定於函式引數的值,不依賴其他狀態。比如sqrt(x)函式計算x的平方根,只要x不變,不論什麼時候呼叫,呼叫幾次,值都是不變的。

函式式程式設計"是一種"程式設計正規化"(programming paradigm),也就是如何編寫程式的方**。

主要思想是把運算過程盡量寫成一系列巢狀的函式呼叫

python對函式式程式設計提供部分支援。由於python允許使用變數,因此,python不是純函式式程式語言

var result = subtract(multiply(add(1,2), 3), 4);

再演進:

add(1,2).multiply(3).subtract(4)

高階函式:

變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式

def add(x,y,f):

return f(x) + f(y)

res = add(3,-6,abs)

print(res)

python語法基礎知識(3)

注釋 python中注釋是提高 的可讀性的 應注重簡潔,無用的多餘的注釋都可以省略 注釋會影響程式執行使用注釋要放在關鍵功能上 注釋方式 使用該種方法時會忽視右邊的一切 使用長注釋時可以採用 三個引號括起 字串連線 字串輸入可以使用雙引號或單引號但不能混合使用 使用 可以進行字串連線 字串str和r...

python3基礎知識一

數字型別包括 int float bool complex 複數 還支援複數,複數的實部a和虛部b都是浮點型。數值計算 string 字串 eg print str 輸出字串 print str 0 1 輸出第乙個到倒數第二個的所有字元,下標前閉後開 print str 2 輸出從第三個開始的後的所...

Python3 基礎知識總結

基礎部分如運算 字串格式化 多行注釋 author xyhu 單行注釋 加減乘 1 1 2 8 1 7 10 2 20 除法自動轉換成浮點數 35 5 7.0 5 3 1.6666666666666667 整數除法的結果都是向下取整 5 3 1 5.0 3.0 1.0 浮點數也可以 5 3 2 5....