MSCBSC 移動(dòng)通信論壇
搜索
登錄注冊(cè)
網(wǎng)絡(luò)優(yōu)化工程師招聘專欄 4G/LTE通信工程師最新職位列表 通信實(shí)習(xí)生/應(yīng)屆生招聘職位

  • 閱讀:1984
  • 回復(fù):0
PYTHON學(xué)習(xí)筆記【函數(shù)介紹】
細(xì)阿哥
中級(jí)會(huì)員
鎵嬫満鍙風(fēng)爜宸查獙璇? style=


 發(fā)短消息    關(guān)注Ta 

積分 500
帖子 100
威望 9542 個(gè)
禮品券 15 個(gè)
專家指數(shù) 0
注冊(cè) 2009-2-25
專業(yè)方向  通信
回答問(wèn)題數(shù) 0
回答被采納數(shù) 0
回答采納率 0%
 
發(fā)表于 2019-10-22 17:48:17  只看樓主 

1     函數(shù)——提高代碼的利用率

函數(shù)的定義

*  無(wú)參數(shù)函數(shù)

def 函數(shù)名():   #首字母小寫

 

def print_hello():   #定義一個(gè)函數(shù)
   
print("Hello World!")

#定義的函數(shù)不會(huì)自行執(zhí)行,需要調(diào)用函數(shù)
print_hello()

*  帶參數(shù)的函數(shù)

 

def 函數(shù)名(參數(shù)1,參數(shù)2,參數(shù)3...):   #參數(shù)名稱不用提前聲明,參數(shù)都是形參,形參特點(diǎn),不用在前面定義,也不會(huì)和之前定義的變量沖突。

def cal(a,b):
    sum=a+b
   
print("%s加上%s等于%s"%(a,b,sum))
a=
1
cal(a,20)    #傳給函數(shù)的數(shù)據(jù)叫實(shí)參。 a和20都是實(shí)參,需要具體的值或提前定義的變量

 

*  帶返回值的函數(shù)

 

def cal_area(r):
    pi=
3.1415926
   
return pi*(r**2#return執(zhí)行后,return后面的代碼不執(zhí)行。return表示函數(shù)結(jié)束

r=9.9
res=cal_area(r)
print("半徑R=%d的面積:%.4f"%(r,res))

 

*  帶條件判斷的函數(shù)

 

def sum_2num(a,b):
   
if is_number(a) and is_number(b):   #判斷是否是數(shù)字類型
       
sum = a + b
       
return sum
   
else:
       
print("沒(méi)法計(jì)算")


def is_number(a):
   
if not isinstance(a,(int,float)):   #判斷是否是數(shù)字類型
       
print("傳入的參數(shù)%s不是數(shù)字類型"%a)
       
return False
    else
:
       
return True
a="A"
b="b"
s=sum_2num(a,b)
print(s)

 

函數(shù)——局部變量和全局變量

局部變量——函數(shù)里面定義的變量

全局變量——函數(shù)外面定義的變量

在函數(shù)中修改全局變量:

1、 如果是可變類型,可以執(zhí)行修改變量的值

2、 如果是不可變類型,修改全局變量其實(shí)是修改變量的引用

*  在函數(shù)中不使用global聲明全局變量時(shí),不能修改全局變量的的本質(zhì),是不能修改全局變量的指向,即不能將全局變量指向新的數(shù)據(jù)

*  對(duì)于不可變類型的全局變量來(lái)說(shuō),因其指向的數(shù)據(jù)不能修改,所以不使用global時(shí)無(wú)法修改全局變量。

*  對(duì)于可變類型的全局變量來(lái)說(shuō),因基指向的數(shù)據(jù)可以修改,所以不使用global時(shí)也可修改全局變量。

*  全局變量定義在調(diào)用的函數(shù)之前

*  可變類型,值和引用均可改變

*  等號(hào)“=”用于改變可變和不可變類型的引用

 

name=['zhangshan','lis','ww']
stu={
'name':'laowang'}
a=
'laogo'
b=100

def test1():
    name[
2]='zifei'
   
stu['age']=23
   
global a
    a=
'golbin'  #修改全局變量
   
global b
    b+=
1
test1()
print("修改后全局變量name的值%s"%name)
print("修改后全局變量stu的值%s"%stu)
print("修改后全局變量a的值%s"%a)
print("修改后全局變量b的值%s"%b)

 

函數(shù)返回多個(gè)值

 

def test():
    a=
1
   
b=2
   
return a,b
x
,y=test()
print(x,y)
x=test()
print(x)

def test2():
    a=
1
   
b=2
   
return [a,b]
x=test2()
print(x)

結(jié)果:

1 2

(1, 2)

[1, 2]

 

函數(shù)參數(shù)

 

def test(x,y,z=10,w=20):  #z的默認(rèn)值為10
   
print("w=%s;x=%s;y=%s;z=%s"%(w,x,y,z))
   
return x+y+z

print(test(2,4),test(2,4,6),test(2,4,w=6))#指定第3個(gè)為w

 

結(jié)果:

w=20;x=2;y=4;z=10

w=20;x=2;y=4;z=6

w=6;x=2;y=4;z=10

16 12 16

 

 

不定長(zhǎng)參數(shù)的函數(shù)

【例1

def test(x,y,*args,z=10):    #定義一個(gè)兩個(gè)以上參數(shù)的函數(shù)(*args參數(shù)個(gè)數(shù)不定)和一個(gè)包含缺省值的參數(shù),包含缺省值的參數(shù)放在后面
   
print(x,y,z,args)
    sum=x+y+z
   
for i in args:
        sum+=i
   
return sum
print("不修改缺省值和為%s;修改缺省值和為%s"%(test(1,2,3,4,5,6,8),test(1,2,3,4,5,6,8,z=20)))



結(jié)果:

 

1 2 10 (3, 4, 5, 6, 8)

1 2 20 (3, 4, 5, 6, 8)

不修改缺省值和為39;修改缺省值和為49

 

【例2


def test2(x,*args,**kwargs):
   
#  *args表示多個(gè)普通參數(shù),將多個(gè)參數(shù)收集到一個(gè)“元組”對(duì)象中
    # **kwargs 多個(gè)有名字的參數(shù), 將多個(gè)參數(shù)收集到一個(gè)“字典”對(duì)象中
   
print("x=%s"%x)
   
print(args)
   
print(kwargs)
    sum=x
   
for i in args:
            sum+=i
   
for i in kwargs.values():
            sum+=i
   
return sum

print("和1為%s"%test2(2,3,4,num1=5,num2=6))
print("="*50)
#集合的拆分
nums=[3,4,5]
nums2={
'num1':5,'num2':6,'num3':7}
print("和2為%s"%test2(2,*nums,**nums2))
 

結(jié)果:

 

x=2

(3, 4)

{'num1': 5, 'num2': 6}

120

==================================================

x=2

(3, 4, 5)

{'num1': 5, 'num2': 6, 'num3': 7}

232

 

變量的引用

def test1(x,y):
    x.replace(
"c","C")   # 構(gòu)建新的字符串,未賦值給任何變量
   
y.append(10)        # 傳入的列表為可變類型,新增元素不改變引用
   
print("x變量指向的內(nèi)存地址為:%s,%s"%(id(x),x))
   
print("y變量指向的內(nèi)存地址為:%s,%s" % (id(y),y))
    x=x.replace(
"c", "C")   #將新的字符串賦值給x變量,改變了引用
   
print("x2變量指向的內(nèi)存地址為:%s,%s" % (id(x),x))

a=
"abcdefg"
b=[1,2,3]
print("a變量指向的內(nèi)存地址為:%s,%s" % (id(a),a))
print("b變量指向的內(nèi)存地址為:%s,%s" % (id(b),b))
test1(a
,b)

 

結(jié)果:

a變量指向的內(nèi)存地址為:2308406102816,abcdefg

b變量指向的內(nèi)存地址為:2308405617288,[1, 2, 3]

x變量指向的內(nèi)存地址為:2308406102816,abcdefg

y變量指向的內(nèi)存地址為:2308405617288,[1, 2, 3, 10]

x2變量指向的內(nèi)存地址為:2308407657336,abCdefg

 

遞歸函數(shù),在函數(shù)內(nèi)部調(diào)用函數(shù)本身

 

1

def test(n):
   
#遞歸函數(shù),計(jì)算數(shù)字n的階乘
    #1、在函數(shù)內(nèi)部調(diào)用自己本身
    #2、遞歸函數(shù)本質(zhì)上是一個(gè)方法的循環(huán)調(diào)用,有可能出現(xiàn)死循環(huán)
    #3、一定要定義遞歸的邊界(什么時(shí)候退出循環(huán))
   
if n==1#遞歸的邊界
       
return 1
   
return n*test(n-1)

n=
4
print(test(n))

 

2

通過(guò)函數(shù)的遞歸,獲取斐波那契數(shù)列

#斐波那契數(shù)列,指的是這樣一個(gè)數(shù)列:1、1、2、35、813、21、34、……在數(shù)學(xué)上,斐波納契數(shù)列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)n>=3,nN*

def F(n):  #獲取斐波那契數(shù)列第n個(gè)的值
   
if n==1 or n==2:
       
return 1
   
return F(n-1)+F(n-2)
n=
30
number=[]
for i in range(1,n+1):
    number.append(F(i))
print(number)

 

匿名函數(shù)

lambda關(guān)鍵字創(chuàng)建小型匿名函數(shù),省略了用def聲明函數(shù)的標(biāo)準(zhǔn)步驟,只包含一個(gè)語(yǔ)句:

Lambda [arg1[,arg2,arg3…]]:expression

1

fun=xy:x+y   (fun())

2

 

def test(a,b,func):#定義三個(gè)變量
   
res=func(a,b)
   
return res

print(test(22,33,lambda x,y:x*y))#第三個(gè)變量用匿名函數(shù)賦值,計(jì)算方式可加、減根據(jù)需要修改靈活

 

3,列表里面字典的排序:

 

stus=[{"name":"zs","age":23},{"name":"ww","age":33},{"name":"ls","age":34}]
stus.sort(
key=lambda x:x["name"])  #當(dāng)前x為列表里面的元素(字典),取字典里面鍵為name的值進(jìn)行排序
print(stus)                         #匿名函數(shù)的功能,返回列表中每個(gè)元素(字典)的name對(duì)應(yīng)的值

 

 

4,動(dòng)態(tài)

def test(a,b,func):
    res=func(a
,b)
   
return res

func_new=
input("請(qǐng)輸入你的操作:")
func_new=
eval(func_new)#字符串轉(zhuǎn)為可以執(zhí)行的表達(dá)式
print(test(22,33,func_new))
 結(jié)果:
請(qǐng)輸入你的操作:lambda x,y:x+y

55

閉包

內(nèi)部函數(shù)對(duì)外部函數(shù)作用域里變量的引用(非全局變量),則稱內(nèi)部函數(shù)為閉包。

1

                                             image.png

2

image.png

*  閉包的應(yīng)用,一元一次方程

image.png

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

函數(shù)

說(shuō)明

int(x[,base])

x轉(zhuǎn)換為一個(gè)整數(shù)

long(x[,base])

x轉(zhuǎn)換為一個(gè)長(zhǎng)整數(shù)

float(x)

x轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù)

complex(rel[,imag])

創(chuàng)建一個(gè)復(fù)數(shù)

str(x)

將對(duì)象x轉(zhuǎn)換為字符串

repr(x)

將對(duì)象x轉(zhuǎn)換為表達(dá)式字符串

eval(str)

用來(lái)計(jì)算在字符串中的有效python表達(dá)式,并返回一個(gè)對(duì)象

tuple(s)

將序列s轉(zhuǎn)換為一個(gè)元組

list(s)

將序列s轉(zhuǎn)換為一個(gè)列表

chr(x)

將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)字符

unichr(x)

將一個(gè)整數(shù)轉(zhuǎn)換為unicode字符

ord(x)

將一個(gè)字符轉(zhuǎn)換為它的整數(shù)值

hex(x)

將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)十六進(jìn)制字符串

oct(x)

將一個(gè)整數(shù)轉(zhuǎn)換為一個(gè)八進(jìn)制字符串



Cmp(item1,item2)

比較兩個(gè)值,python2

Len(item)

計(jì)算元素個(gè)數(shù)

Max(item)

返回元素最大值

Min(item)

返回元素最小值

Del(item)

刪除元素

 

cmp函數(shù)(python2)

cmp(item1,item2)比較兩個(gè)值,相等返回0,item1小于item2返回-1item1大于item2,返回1

 

>>> a=1

>>> b=4

>>> c=cmp(a,b)

>>> c

-1

>>> a="f"

>>> b="e"

>>> c=cmp(a,b)

>>> c

1

 

統(tǒng)計(jì)字符出現(xiàn)次數(shù)

 

str=input("Please input str:")
res={}

for i in str:
  
if i in res:
     res[i]=res[i]+
1
  
else:
     res[i]=
1
print(res)

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

dir(__builtins__)

Ø  range(start,stop[,step])  計(jì)數(shù)從start開始,默認(rèn)是從0開始,到stop結(jié)束,但不包括stop;每次跳躍的間距,默認(rèn)為1

Ø  map(function,sequence[,sequence,…])根據(jù)提供的函數(shù),對(duì)指定序列做映射

python2直接返回列表,python3返回一個(gè)迭代器

image.png

python3

image.png

image.png

Ø  filter(function or None,sequence) 對(duì)指定序列執(zhí)行過(guò)濾操作,python3返回一個(gè)filter對(duì)象,是一個(gè)迭代器;Python2直接返回列表

python2

image.png

python3

image.png

Ø  reduce(function,sequence[,initial]) 對(duì)參數(shù)序列中元素進(jìn)行累積

python3里面,reduce()函數(shù)已經(jīng)被從全局名字空間里移除了,它現(xiàn)在被放置在fuctools模塊里面

image.png

 

掃碼關(guān)注5G通信官方公眾號(hào),免費(fèi)領(lǐng)取以下5G精品資料
  • 1、回復(fù)“YD5GAI”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):5G網(wǎng)絡(luò)AI應(yīng)用典型場(chǎng)景技術(shù)解決方案白皮書
  • 2、回復(fù)“5G6G”免費(fèi)領(lǐng)取《5G_6G毫米波測(cè)試技術(shù)白皮書-2022_03-21
  • 3、回復(fù)“YD6G”免費(fèi)領(lǐng)取《中國(guó)移動(dòng):6G至簡(jiǎn)無(wú)線接入網(wǎng)白皮書
  • 4、回復(fù)“LTBPS”免費(fèi)領(lǐng)取《《中國(guó)聯(lián)通5G終端白皮書》
  • 5、回復(fù)“ZGDX”免費(fèi)領(lǐng)取《中國(guó)電信5G NTN技術(shù)白皮書
  • 6、回復(fù)“TXSB”免費(fèi)領(lǐng)取《通信設(shè)備安裝工程施工工藝圖解
  • 7、回復(fù)“YDSL”免費(fèi)領(lǐng)取《中國(guó)移動(dòng)算力并網(wǎng)白皮書
  • 8、回復(fù)“5GX3”免費(fèi)領(lǐng)取《 R16 23501-g60 5G的系統(tǒng)架構(gòu)1
  • 對(duì)本帖內(nèi)容的看法? 我要點(diǎn)評(píng)

     
    [充值威望,立即自動(dòng)到帳] [VIP貴賓權(quán)限+威望套餐] 另有大量?jī)?yōu)惠贈(zèng)送活動(dòng),請(qǐng)光臨充值中心
    充值擁有大量的威望和最高的下載權(quán)限,下載站內(nèi)資料無(wú)憂

    快速回復(fù)主題    
    標(biāo)題
    內(nèi)容
     上傳資料請(qǐng)點(diǎn)左側(cè)【添加附件】

    當(dāng)前時(shí)區(qū) GMT+8, 現(xiàn)在時(shí)間是 2025-04-07 11:52:34
    渝ICP備11001752號(hào)  Copyright @ 2006-2016 mscbsc.com  本站統(tǒng)一服務(wù)郵箱:mscbsc@163.com

    Processed in 0.477583 second(s), 13 queries , Gzip enabled
    TOP
    清除 Cookies - 聯(lián)系我們 - 移動(dòng)通信網(wǎng) - 移動(dòng)通信論壇 - 通信招聘網(wǎng) - Archiver