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

歡迎訪問 生活随笔!

生活随笔

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

python

python123编写函数求和_Python基础之函数

發(fā)布時間:2024/10/5 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python123编写函数求和_Python基础之函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python基礎(chǔ)之函數(shù)

一、函數(shù)基礎(chǔ)

1、函數(shù)概念:

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

2、函數(shù)的作用

(1)減少重復(fù)代碼

(2)使程序變的可擴(kuò)展

(3)使程序變得易維護(hù)

3、語法定義def?sayhi(x):???????????????#函數(shù)名

’’’函數(shù)說明’’’

print("Hello,?I'mnobody!")

return?x????????????????????#函數(shù)返回值

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

關(guān)鍵字說明:

def:創(chuàng)建函數(shù)

sayhi():函數(shù)名

print("Hello, I'm nobody!"):函數(shù)體

return():返回值

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

4、函數(shù)的執(zhí)行過程

定義函數(shù),在程序執(zhí)行過程中,函數(shù)體不執(zhí)行,只有當(dāng)程序調(diào)用函數(shù)時,函數(shù)才會執(zhí)行。

函數(shù)執(zhí)行過程:def?f1():

print(123)

return?"111"???#在函數(shù)中,一旦執(zhí)行return,函數(shù)執(zhí)行過程立即終止

print(456)

r?=?f1()???????????#只有調(diào)用函數(shù)時,函數(shù)才會執(zhí)行

print(r)???????????#打印函數(shù)返回值

5、函數(shù)的返回值

(1)返回值數(shù)量為0時,返回None

(2)返回值數(shù)量等于1時,返回object

(3)返回值數(shù)量大于1時,返回tupledeftest():

print("first")

#沒有返回值

deftest2():

print("second")

return?2??????????????????????#返回值數(shù)量為1時

deftest3():

print("three")

return3,"dayi123",{"age":18,'name':"yiliu"}????#返回值數(shù)量多個時

one?=test()

two?=test2()

three=?test3()

print(one)

print(two)

print(three)

二、函數(shù)的參數(shù)

1函數(shù)的基本參數(shù)

(1)、普通參數(shù)

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

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

print(xxoo,content)

print("發(fā)送郵件成功:",xxoo,content)

return?True

send(dayi,?is)???????????????????????????#dayi、is為形參

(2)、默認(rèn)參數(shù)def?send(xxoo,content,xx="ok"):?????#默認(rèn)參數(shù)必須放在參數(shù)列表最后,可以有多個默認(rèn)參數(shù)

print(xxoo,content,xx)

print("發(fā)送郵件成功:",xxoo,content,xx)

return?True

send('dayi','is')???????????????????#如果沒有傳參、則傳遞默認(rèn)參數(shù)

send('dayi','is','niuB')??????????????#如果傳遞參數(shù),則返回結(jié)果為傳遞參數(shù)

(3)、制定參數(shù)

默認(rèn)傳遞的參數(shù)是根據(jù)順序,制定參數(shù),可以打亂參數(shù)的順序:def?send(xxoo,content):

print(xxoo,content)

print("發(fā)送郵件成功:",xxoo,content)

return?True

send(content='dayi',xxoo='is')?????#將’dayi’傳遞給conttent,將‘is’換遞給xxoo

2、函數(shù)的動態(tài)參數(shù)

(1)、動態(tài)參數(shù):傳參時可以傳一個或任意多個參數(shù)

1)、傳參時加一個”*”

作用:會將傳的參數(shù)放入元組中、

應(yīng)用場景:傳的參數(shù)有順序def?fl(*args):??????????#?行參中帶*則表示動態(tài)參數(shù)

print(args,type(args))

fl(11)

li?=?[22,"dayi","liu"]

fl(li)?????????????????#?把?"li"當(dāng)做一個整體傳到元組里面

fl(*li)????????????????#加"*"把li中元素傳到元組里面

fl(li,12)

li2?=?"dayi123"

fl(li2)????????????????#不帶*,將li2整體傳進(jìn)元組,帶"*",將li2中每個字符串分別傳進(jìn)元組

fl(*li2)

2)、傳參時加兩個”*”

作用:會將傳的參數(shù)放入字典中

應(yīng)用場景:傳的參數(shù)沒有順序def?f1(**args):

print(args,type(args))

f1(n1="dayi123",n2=24)?????????????#傳參時必須傳兩個,一個“KEY”一個“value”

dic?=?{'name':"dayi",'age':18}

f1(kk=dic)?????????????????????????#傳參是把字典當(dāng)做一個整體傳進(jìn)字典中

f1(**dic)??????????????????????????#傳參時將字典中的每一個值分別傳進(jìn)字典中

3)、傳參時既有兩個”*”,又有一個”*”

作用:萬能參數(shù),既可以傳一個”*”的參數(shù),又可以傳”**”的參數(shù)ef?f1(*args,**kwargs):

print(args,type(args))

print(kwargs)

f1(1,2,3,name="dayi",age=24)

tup?=?(22,33,44,55)

dic?=?{'name':"dayi123",'age':23}

f1(*tup,**dic)

f1(yz=tup,cd=dic)

(2)、利用動態(tài)參數(shù)實現(xiàn)format功能s1?=?"i?am?{0},age{1}".format("dayi123",18)

print(s1)

s2?=?"i?am?{0},age?{1}".format(*["dayi123",24])????????#傳遞列表中的參數(shù),前面必須加“*”

print(s2)

s3?=?"i?am?{name},age?{age}".format(name="dayi123",age=24)

print(s3)

dic?=?{'name':'dayi123',"age":24}

s4?=?"i?am?{name},age?{age}".format(**dic)??????????????#將字典中參數(shù)傳遞給s4,必須加“**”

print(s4)

(3)、函數(shù)傳參傳遞的是引用def?f1(a1):

a1.append(999)?????#?函數(shù)傳參傳遞的是引用

li?=?[11,22,33,44]

f1(li)

print(li)

3、全局變量與局部變量

全局變量針對所有作用域均可讀,局部變量只針對部分作用域可讀,全局變量聲明要用大寫,全局變量可以是列表、字典。全局變量可以通過global修改,如果全局變量是字典、列表,則可以修改,但不能重新賦值。NAME?=?"alex"????????????#全局變量,所有作用域都可讀,全局變量的聲明要大寫

#NAME?=?[123,456,789]?????#如果全局變量是列表字典,則可以修改,但不可重新賦值

def?fl():

age?=?18

global?NAME????????#修改全局變量,對全局變量重新賦值,需要先global

NAME?=?"123"????????#局部變量,只對當(dāng)前作用于生效

print(age,NAME)

def?f2():

age?=?19

print(age,NAME)

fl()

f2()

定義的字符串、數(shù)字格式的全局變量不能再局部變量中直接修改,但定義的列表,字典等全局變量可在局部變量中直接修改:names=?["dayi",18,"boy"]

defchange_name():

names[0]?=?"liu"

print("inside?func",names)

print(names)

change_name()

print(names)

例:用函數(shù)實現(xiàn)登錄功能def?login(username,password):

f?=?open("db",'r')?????????????#打開db.txt文件,’r’代表讀取

for?line?in?f:

line_list?=?line.split("|")?#一行一行讀取,使用“|”分隔

if?line_list[0]?==?username?and?line_list[1]?==?password:

return?True

def?register(username,password):

f?=?open("db",'a')?????????????#打開db.txt文件,’a’代表追加

temp?=?"\n"?+?username?+?"|"?+?password

f.write(temp)???????????????????#向db.txt中寫入

f.close()???????????????????????#關(guān)閉并生效

def?main():

t?=?input("1:登錄;2:注冊")

if?t?==?"1":

user?=?input("請輸入用戶名:")

pwd?=?input("請輸入密碼:")

r?=?login(user,pwd)

if?r:

print("登錄成功")

else:

print("登錄失敗")

elif?t?==?"2":

user?=?input("請輸入用戶名:")

pwd?=?input("請輸入密碼:")

register(user,pwd)

main()

同時,新建db.txt文件,輸入:dayi123|dayi123

三、三元(三目)運算及l(fā)ambda表達(dá)式

1、三元運算if?1?==1:

name=?"liu"

else:

name=?"sb"

#等同于:

name?=?"liu"?if?1?==?1?else?"sb"

2、lambda表達(dá)式(匿名函數(shù))def?f1(a1,a2):

return?a1?+?a2?+?100

ret?=?f1(10,12)

print(ret)

#等同于

f2?=?lambda?a1,a2:?a1?+a2?+?100

ret2?=?f2(10,12)

print(ret2)

3、中括號中的條件判斷以及循環(huán)舉例:a?=?range(10)

print([i?for?i?in?a?if?i<5])

輸出結(jié)果為: [0, 1, 2, 3, 4]

四、遞歸

1、遞歸:

遞歸算法是一種直接或者間接地調(diào)用自身算法的過程。在計算機(jī)編寫程序中,遞歸算法對解決一大類問題是十分有效的,它往往使算法的描述簡潔而且易于理解。

2、遞歸算法特點:

(1)遞歸就是在過程或函數(shù)里調(diào)用自身。

(2)在使用遞歸策略時,必須有一個明確的遞歸結(jié)束條件,稱為遞歸出口。

(3)遞歸算法解題通常顯得很簡潔,但遞歸算法解題的運行效率較低。所以一般不提倡用遞歸算法設(shè)計程序。

(4)在遞歸調(diào)用的過程當(dāng)中系統(tǒng)為每一層的返回點、局部量等開辟了棧來存儲。遞歸次數(shù)過多容易造成棧溢出等。所以一般不提倡用遞歸算法設(shè)計程序。

3、遞歸舉例——階乘def?func(num):

if?num?==?1:

return?1

return?num?*?func(num-1)

x?=?func(7)

print(x)

五.高階函數(shù)

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

#?Author:dayi123

def?fuc(a,b,f):

return?f(a)+f(b)?????#將a、b的值交給函數(shù)f處理后求和再返回

add?=?fuc(7,-10,abs)??????#將內(nèi)置函數(shù)abs傳遞給f

print(add)

總結(jié)

以上是生活随笔為你收集整理的python123编写函数求和_Python基础之函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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