日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

status函数python_python之路-函数

發(fā)布時間:2024/8/1 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 status函数python_python之路-函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本節(jié)內(nèi)容

1. 函數(shù)基本語法及特性

2. 參數(shù)與局部變量

3. 返回值

嵌套函數(shù)

4.遞歸

5.匿名函數(shù)

6.函數(shù)式編程介紹

7.高階函數(shù)

8.內(nèi)置函數(shù)

函數(shù)是什么?

函數(shù)一詞來源于數(shù)學(xué),但編程中的「函數(shù)」概念,與數(shù)學(xué)中的函數(shù)是有很大不同的,具體區(qū)別,我們后面會講,編程中的函數(shù)在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子過程或子程序),在Pascal中叫做procedure(過程)和function,在C中只有function,在Java里面叫做method。

定義: 函數(shù)是指將一組語句的集合通過一個名字(函數(shù)名)封裝起來,要想執(zhí)行這個函數(shù),只需調(diào)用其函數(shù)名即可

特性:

減少重復(fù)代碼

使程序變的可擴展

使程序變得易維護

def 函數(shù)名(): 括號是用來傳參的,靈活應(yīng)用

函數(shù)名() #調(diào)用

形參:變量只有在被調(diào)用時才分配內(nèi)存單元,在調(diào)用結(jié)束時,即刻釋放所分配的內(nèi)存單元。因此,形參只在函數(shù)內(nèi)部有效。函數(shù)調(diào)用結(jié)束返回主調(diào)用函數(shù)后則不能再使用該形參變量

實參:可以是常量、變量、表達式、函數(shù)等,無論實參是何種類型的量,在進行函數(shù)調(diào)用時,它們都必須有確定的值,以便把這些值傳送給形參。因此應(yīng)預(yù)先用賦值,輸入等辦法使參數(shù)獲得確定值

def sayhi(name,age,nationality='CN'): -----name、age是形參 ,有的默認參數(shù)都放在非默認參數(shù)(位置參數(shù))的右邊print('i am %s,' %name,age,nationality) -----如果不調(diào)用,就安默認打印,

sayhi('haha',22) ------haha、22是實參

sayhi('haha',22,US) ------如果傳參的話就打印傳入的內(nèi)容

sayhi(name= '11',22) ------指定參數(shù)傳參,也的放在位置參數(shù)后面 關(guān)鍵參數(shù),如果給其中一個寫定,并且不按順序?qū)?#xff0c;其他的都的寫定。

關(guān)鍵參數(shù)

正常情況下,給函數(shù)傳參數(shù)要按順序,不想按順序就可以用關(guān)鍵參數(shù),只需指定參數(shù)名即可,但記住一個要求就是,關(guān)鍵參數(shù)必須放在位置參數(shù)之后。

非固定參數(shù)

若你的函數(shù)在定義時不確定用戶想傳入多少個參數(shù),就可以使用非固定參數(shù)。

def sayhi(name,age,nationality='CN',*args): *args以元組的形式存在,如果寫單個元素就是元組。

def sayhi(name,age,nationality='CN',**kwargs) **kwargs以字典的形式存在,如果寫name = 'lwq',就寫入字典中。

全局與局部變量

在子程序中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。

全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。

當(dāng)全局變量與局部變量同名時:

在定義局部變量的子程序內(nèi),局部變量起作用;在其它地方全局變量起作用。

login_status = False #全局變量 雖然與局部變量名字相同,但是在內(nèi)存中的地址不一樣

defauth(username,password):#get date from db

_username = 'alex'_password= 'alex3714'

if username == _username and password ==_password:print('ok')#global login_status #改全局變量,要用global,并且將原來的全局變量寫上

login_status = True #局部變量,只在函數(shù)中生效

print('--->',login_status)defhome():if login_status ==True:print('welcome')else:

auth()defpay():if login_status ==True:print('welcome')else:

auth()

username= input('username:').strip()

password= input('password:').strip()

auth()

返回值:

1.一旦你的函數(shù)經(jīng)過調(diào)用并開始執(zhí)行,那你的函數(shù)外部的程序就沒有辦法再控制函數(shù)的執(zhí)行的過程了,此時外部程序只能等待函數(shù)的執(zhí)行結(jié)果,因為外部程序要根據(jù)外部函數(shù)的執(zhí)行結(jié)果來決定下一步如何走,

執(zhí)行結(jié)果就是以return的形式返回給外部程序。

2.return代表著一個函數(shù)的結(jié)束。

3.return可以返回python中的任何數(shù)據(jù)類型,一次能返回多個值,以元組的形式返回。

4.對于用戶角度,函數(shù)可以返回任意數(shù)量的值,但對于py本身來講,函數(shù)只能返回一個。

defauth():

username= input('username:').strip()

password= input('password:').strip()#get date from db

_username = 'alex'_password= 'alex3714'

if username == _username and password ==_password:print('ok')returnTrueelse:returnFalsedefhome():if login_status ==True:print('welcome')else:

auth()defpay():if login_status ==True:print('welcome')else:

auth()

login_status=auth()

home()

pay()

嵌套函數(shù)

name = 'alex'

defchangeName():

name= 'jack'

print(name)defchangeName2():

name= 'rain'

print('name2', name)

changeName2()

changeName()

遞歸函數(shù)

特性:

1.必須有一個明確的結(jié)束條件

2.每進入更深一層遞歸時,問題規(guī)模相比上次遞歸都應(yīng)有所減少

3.遞歸效率不高,遞歸層次過多會導(dǎo)致棧溢出(在計算機中,函數(shù)調(diào)用是通過stack這種數(shù)據(jù)結(jié)構(gòu)實現(xiàn)的)

每當(dāng)進入一個函數(shù),棧就會加一層棧幀,每當(dāng)函數(shù)減少一層,棧幀就減少一層。

遞歸函數(shù)的典型事例:二分查找

#data = [3,5,10,1,12,14,17,11,19,20,19]#date = [1,3,5,10,11,12,14,17,19,19,20]

date = range(0,10000,3) #range 出來就是列表

defbinary_search(datasets,find_num):if len(datasets) >0:

middle_pos= int(len(datasets)/2)if date[middle_pos] ==find_num:print('Find num:',datasets[middle_pos])elif date[middle_pos] >find_num:print('go to left side',datasets[0:middle_pos],datasets[middle_pos])

binary_search(datasets[0:middle_pos],find_num)else:print('go to righ side',datasets[middle_pos+1:],datasets[middle_pos])

binary_search(datasets[middle_pos+1:],find_num)else:print('cannot not find num')

binary_search(date,15)

匿名函數(shù):

匿名函數(shù)就是不需要顯式的指定函數(shù)

正常定義函數(shù):

defcalc(n):return n*n

print(cacl)

def calc(n,j):

return n*j

print(cacl)

匿名函數(shù):

calc2 = lambda x:x*xprint(cacl2)

calc2 = lambda x,y:x*x

calc(8)

與map函數(shù)搭配使用

data = map(lambda n:n*2 if n>5 else n,range(10))

data = map(lambda n:n*2 if n>5 else calc(n),range(10))

def cal(n):

return -n

data = map(lambda n:n**n if n>5 else cal(n),range(10))

for i in data:

print(i)

三元運算

a =4

b= 5

c = if a >10 else b

上面的匿名函數(shù)與map搭配使用中就用到了三元運算。

函數(shù)式編程介紹

函數(shù)是Python內(nèi)建支持的一種封裝,我們通過把大段代碼拆成函數(shù),通過一層一層的函數(shù)調(diào)用,就可以把復(fù)雜任務(wù)分解成簡單的任務(wù),這種分解可以稱之為面向過程的程序設(shè)計。函數(shù)就是面向過程的程序設(shè)計的基本單元。

函數(shù)式編程中的函數(shù)這個術(shù)語不是指計算機中的函數(shù)(實際上是Subroutine),而是指數(shù)學(xué)中的函數(shù),即自變量的映射。也就是說一個函數(shù)的值僅決定于函數(shù)參數(shù)的值,不依賴其他狀態(tài)。比如sqrt(x)函數(shù)計算x的平方根,只要x不變,不論什么時候調(diào)用,調(diào)用幾次,值都是不變的。

Python對函數(shù)式編程提供部分支持。由于Python允許使用變量,因此,Python不是純函數(shù)式編程語言。

一、定義

簡單說,"函數(shù)式編程"是一種"編程范式"(programming paradigm),也就是如何編寫程序的方法論。

主要思想是把運算過程盡量寫成一系列嵌套的函數(shù)調(diào)用。舉例來說,現(xiàn)在有這樣一個數(shù)學(xué)表達式:

(1 + 2) * 3 - 4

傳統(tǒng)的過程式編程,可能這樣寫:

var a = 1 + 2;

var b = a * 3;

var c = b - 4;

函數(shù)式編程要求使用函數(shù),我們可以把運算過程定義為不同的函數(shù),然后寫成下面這樣:

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

這段代碼再演進以下,可以變成這樣

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

這基本就是自然語言的表達了。再看下面的代碼,大家應(yīng)該一眼就能明白它的意思吧:

merge([1,2],[3,4]).sort().search("2")

因此,函數(shù)式編程的代碼更容易理解。

高階函數(shù)

變量可以指向函數(shù),函數(shù)的參數(shù)能接收變量,那么一個函數(shù)就可以接收另一個函數(shù)作為參數(shù),這種函數(shù)就稱之為高階函數(shù)。

abs求絕對值defadd(x,y,f):return f(x) +f(y)defcalc(n):return n+1res= add(3,-6,cacl)print(res)

編程范式:

1.面向過程

2.面向?qū)ο?/p>

3.函數(shù)式編程

內(nèi)置函數(shù)

python自帶

a = [1,2,3]

all(a)

#判斷是否為真

any() #列表任意一個為真就返回真

ascii() #顯示成ascii表的東西

bin() #將數(shù)字轉(zhuǎn)成二進制

print(bin(10))

bool #判斷是否為true

bytes #0-255之間的數(shù)字,ascii表

bytearray #改bytes值

callable() #判斷對象是否可以被調(diào)用

chr() #把數(shù)字轉(zhuǎn)換成二進制

print(chr(97)) #打印ascii表的對應(yīng)關(guān)系

print(ord('b')) #將字符對應(yīng)成ascii表中的數(shù)字

f = open('遞歸.py',encoding='utf-8')

code = compile(f.readline(),'','exec')

print(code)

exec(code) #執(zhí)行這段代碼,這段代碼是字符串

eval() #數(shù)字運算

complex #復(fù)數(shù)

complex(4,5)

print(dir(f)) #dir返回文件的方法

divmod() #地板除,放回商和余數(shù)

divmod(10,2)

filter #過濾

for i in filter(lambda x:x>5,range(10)):

print(i)

format() #字符串格式化

frozenset({1,4,5,5,6}) #把集合變成只讀

print(a)

#就沒有add方法

globals()

print(globals()) #把當(dāng)前程序所在內(nèi)存中所有的數(shù)據(jù)都以字典的形式打印出來

locals() #只打印局部

hex() #十六進制

print(hex(8))

max() #返回列表匯總最大值

print(max())

min() #返回最小值

oct() #八進制0o8

print(pow(4,9)) #4**9

#分隔符

msg = "又回到最初的起點"

f = open("tofile","w")

print(msg,"記憶中你青澀的臉",sep="|",end="",file=f)

data = [1,2,3,5,8]

data = reversed(data) #反轉(zhuǎn)(字符串、列表)

for i in data:

print(i)

round() #五舍六入

print(round(10.25,1))

data = [10,2,4]

print(set(data)) #將列表變成集合

#切片

a = range(20)

pattern = slice(3,8,1)

for i in a[pattern]:

print(i)

a= 'alex'

a= sorted(a) #按ascii碼排序

print(a) 以列表的形式打印,字符竄、集合、列表(并且其中只能由一種數(shù)據(jù)類型)

data = [10,2,3,45,56,3]

print(sum(data)) #相加 列表、集合、元組都可相加。

print(vars()) #打印當(dāng)前程序在內(nèi)存中的所有數(shù)據(jù)

zip # 類似拉鏈效應(yīng),如果對應(yīng)不上,就按少的來

a = [1,3,5,7]

b = [2,4,6,8]

for i in zip(a,b):

print(i)

總結(jié)

以上是生活随笔為你收集整理的status函数python_python之路-函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。