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

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


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

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

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

函數(shù)的定義

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

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

 

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

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

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

 

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

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

 

*  帶返回值的函數(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("沒法計算")


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ù)中不使用global聲明全局變量時,不能修改全局變量的的本質(zhì),是不能修改全局變量的指向,即不能將全局變量指向新的數(shù)據(jù)

*  對于不可變類型的全局變量來說,因其指向的數(shù)據(jù)不能修改,所以不使用global時無法修改全局變量。

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

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

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

*  等號“=”用于改變可變和不可變類型的引用

 

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ù)返回多個值

 

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的默認值為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個為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

 

 

不定長參數(shù)的函數(shù)

【例1

def test(x,y,*args,z=10):    #定義一個兩個以上參數(shù)的函數(shù)(*args參數(shù)個數(shù)不定)和一個包含缺省值的參數(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表示多個普通參數(shù),將多個參數(shù)收集到一個“元組”對象中
    # **kwargs 多個有名字的參數(shù), 將多個參數(shù)收集到一個“字典”對象中
   
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ù),計算數(shù)字n的階乘
    #1、在函數(shù)內(nèi)部調(diào)用自己本身
    #2、遞歸函數(shù)本質(zhì)上是一個方法的循環(huán)調(diào)用,有可能出現(xiàn)死循環(huán)
    #3、一定要定義遞歸的邊界(什么時候退出循環(huán))
   
if n==1#遞歸的邊界
       
return 1
   
return n*test(n-1)

n=
4
print(test(n))

 

2

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

#斐波那契數(shù)列,指的是這樣一個數(shù)列:1、1、2、35、8、1321、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個的值
   
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ù)的標準步驟,只包含一個語句:

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

1

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

2

 

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

print(test(22,33,lambda x,y:x*y))#第三個變量用匿名函數(shù)賦值,計算方式可加、減根據(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的值進行排序
print(stus)                         #匿名函數(shù)的功能,返回列表中每個元素(字典)的name對應(yīng)的值

 

 

4,動態(tài)

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

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

55

閉包

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

1

                                             image.png

2

image.png

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

image.png

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

函數(shù)

說明

int(x[,base])

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

long(x[,base])

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

float(x)

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

complex(rel[,imag])

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

str(x)

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

repr(x)

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

eval(str)

用來計算在字符串中的有效python表達式,并返回一個對象

tuple(s)

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

list(s)

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

chr(x)

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

unichr(x)

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

ord(x)

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

hex(x)

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

oct(x)

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



Cmp(item1,item2)

比較兩個值,python2

Len(item)

計算元素個數(shù)

Max(item)

返回元素最大值

Min(item)

返回元素最小值

Del(item)

刪除元素

 

cmp函數(shù)(python2)

cmp(item1,item2)比較兩個值,相等返回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)計字符出現(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])  計數(shù)從start開始,默認是從0開始,到stop結(jié)束,但不包括stop;每次跳躍的間距,默認為1

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

python2直接返回列表,python3返回一個迭代器

image.png

python3

image.png

image.png

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

python2

image.png

python3

image.png

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

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

image.png

 

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

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

    快速回復(fù)主題    
    標題
    內(nèi)容
     上傳資料請點左側(cè)【添加附件】

    當(dāng)前時區(qū) GMT+8, 現(xiàn)在時間是 2025-02-23 15:10:24
    渝ICP備11001752號  Copyright @ 2006-2016 mscbsc.com  本站統(tǒng)一服務(wù)郵箱:mscbsc@163.com

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