亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python3.5基礎之函數定義的示例分析

發布時間:2021-07-16 13:55:41 來源:億速云 閱讀:149 作者:小新 欄目:開發技術

小編給大家分享一下Python3.5基礎之函數定義的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

具體如下:

1、函數學習框架

Python3.5基礎之函數定義的示例分析

2、函數的定義與格式

(1)定義

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

(2)函數調用

Python3.5基礎之函數定義的示例分析

注:函數名稱不能以數字開頭,建議函數名稱的開頭用小寫的字母

(3)函數有四種格式,分別是:無參數無返回值,有參數無返回值、無參數有返回值、有參數有返回值

Python3.5基礎之函數定義的示例分析

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

# 無參數無返回值
def hello():
 # 函數體/方法體
 print("hello world")


hello()


# 有參數無返回值
def add(x, y):
 print(x + y)


add(10, 20)


# 無參數有返回值
def sleep():
 return "sleep"


s = sleep()
print(s)


# print(sleep())  等價于上面兩句

# 有參數有返回值
def sub(x, y):
 return x * y


res = sub(12, 6)
print(res)

運行結果

hello world
30
sleep
72

3、函數的參數

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

注:定義再函數體內的參數是形參,調用時傳入的參數是實參。

函數參數包括:位置參數關鍵字參數不定個數參數

(1)位置參數、關鍵字參數

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

示例代碼:

#位置參數
def test(x,y,z):
 print(x,y,z)

test(1,2,3)

#關鍵字參數
def test1(x,y,z=10):
 print(x,y,z)

test1(1,2,3)
test1(1,2)  #關鍵字參數,z采用默認的參數值
test1(x=2,z=3,y=1) #調用時的關鍵字參數

運行結果:

1 2 3
1 2 3
1 2 10
2 1 3

(2)默認參數

Python3.5基礎之函數定義的示例分析

注:帶有默認值參數的形參必須放在參數的最后面的位置。

(3)不定個數參數,用*args   和    **kwarg

Python3.5基礎之函數定義的示例分析

總結:

(1)定義時  *的作用  將位置實參裝配成元組

定義時  **的作用  將關鍵字實參裝配成字典

(2)調用時  *作用  將元組或列表打散成位置參數進行參數傳遞

調用時  **作用  將字典打散成關鍵字參數進行參數傳遞

#不定個數參數

def test2(x,y,z,*args):
 print(x,y,z,args)

#定義時 *的作用 將位置實參裝配成元組
test2(1,2,3,4,6,7,8,9)


def test3(x,y,z,**kwargs):
 print(x,y,z,kwargs)

#定義時 **的作用 將關鍵字實參裝配成字典
test3(1,2,3,a=6,b=19,c=8)

def ts(x,*args,**kwargs):
 print(x,args,kwargs)

ts(1,2,3,a=6,b=19,c=8)

def test4(x,y,z):
 print(x,y,z)

x = [1,2,3]
y = {"x":1,"y":"hello","z":"你好"}

test4(*x)  #調用時 *作用 將元組或列表打散成位置參數進行參數傳遞
test4(**y)  #調用時 **作用 將字典打散成關鍵字參數進行參數傳遞

 運行結果:

1 2 3 (4, 6, 7, 8, 9)
1 2 3 {'b': 19, 'a': 6, 'c': 8}
1 (2, 3) {'b': 19, 'a': 6, 'c': 8}
1 2 3
1 hello 你好

4、函數的傳值:基本類型傳值調用、非基本類型參數傳遞調用(強引用與弱引用)

Python3.5基礎之函數定義的示例分析

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#基本類型傳值調用
def test(x):
 print(x)

test(10)

#非基本類型參數傳遞調用
li = [1,2,3,4]
print(id(li)) #打印傳遞前的地址

def test1(x):
 print(id(x))
 x[0] = 2 #修改第一個參數為2
 print(x)

test1(li) #強引用(傳址調用,列表里面的內容會進行修改)
#test1(list(li)) #弱引用(用list可以消除強引用,不能修改列表里的元素)

for i in li:
 print(i)

運行結果:(強引用傳址調用)

10
17741864
17741864
[2, 2, 3, 4]
2
2
3
4

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#基本類型傳值調用
def test(x):
 print(x)

test(10)

#非基本類型參數傳遞調用
li = [1,2,3,4]
print(id(li)) #打印傳遞前的地址

def test1(x):
 print(id(x))
 x[0] = 2 #修改第一個參數為2
 print(x)

#test1(li) #強引用(傳址調用,列表里面的內容會進行修改)
test1(list(li)) #弱引用(用list可以消除強引用,傳值調用,不能修改列表里的元素)

for i in li:
 print(i)

運行結果:(弱引用,傳值調用)

10
18501544
18613272
[2, 2, 3, 4]
1
2
3
4

Python3.5基礎之函數定義的示例分析

#不可變對象——傳遞對象的值,修改值修改的是另一個復制對象,不影響原來對象本身
def getNum(a):
 a = 10
 print("函數內變量a的值:",a)

a = 8
getNum(a)
print("函數外變量a的值:",a)

#可變對象——傳遞對象本身,函數內部修改值會影響對象本身
list01 = [0,1,2,3]

def getNum1(num):
 num.append(4)
 print(num)
 print(id(num))

getNum1(list01)
print(list01)
print(id(list01))

運行結果:

函數內變量a的值: 10
函數外變量a的值: 8
[0, 1, 2, 3, 4]
5908280
[0, 1, 2, 3, 4]
5908280

5、函數的返回值

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

示例代碼:

#多個返回值
def re(a,b):
 a *= 10
 b *= 10
 return a,b

num = re(1,2)
print(type(num))  #如果返回多個值,并且存在一個變量中,會以元組的形式保存
print(num)

#分別獲取多個返回值
re1,re2 = re(3,4)
print(type(re1))
print(re1,re2)

運行結果:

<class 'tuple'>
(10, 20)
<class 'int'>
30 40

簡單實例練習:

Python3.5基礎之函數定義的示例分析

def operation(a,b,opt):
 if opt == "+":
  return a+b
 elif opt == "-":
  return a-b
 elif opt =="*":
  return a*b
 elif opt =="/":
  return a/b
 else:
  return "輸入有誤"

num1 = int(input("請輸入第一個字符:"))
num2 = int(input("請輸入第二個字符:"))
op = input("請輸入運算符:")
result = operation(num1,num2,op)
print(result)

運行結果:

請輸入第一個字符:1
請輸入第二個字符:2
請輸入運算符:+
3

6、變量的作用域:全局變量與局部變量

在函數的內部,不能識別全局變量,想要在函數內部使用全局變量,需要關鍵字global,但不建議這樣使用,使用global具有污染性。

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

(1)局部變量

Python3.5基礎之函數定義的示例分析

(2)全局變量

Python3.5基礎之函數定義的示例分析

(3)當全局變量與局部變量同名時,優先使用局部變量

#全局變量與局部變量同名
a = 10  #全局變量
print("全局變量a:%d"%a)

def test01():
 a = 20
 print("test01中的a:%d"%a)

def test02():
 print("test02中的a:%d"%a)

test01()
test02()

運行結果:

全局變量a:10
test01中的a:20
test02中的a:10

(4)修改全局變量

Python3.5基礎之函數定義的示例分析

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

i = 20

def test():
 #i += 10  #函數內部直接修改全局的值(錯誤)
 global i  #函數內部修改全局的值用global關鍵字
 i += 10
 print(i)  #獲取全局變量的值

test()

運行結果:

30

Python3.5基礎之函數定義的示例分析

注:上邊代碼中,函數內修改不可變類型的全局變量,需要通過global關鍵字

Python3.5基礎之函數定義的示例分析

總結:對不可變類型變量重新賦值,實際上是重新創建一個不可變類型對象,并將原來的變量指向新創建的對象。

如果沒有其他變量引用原有對象的話(即:引用計數為0),原有對象就會被回收。

(5)可變類型的全局變量:函數內修改可變類型的全局變量,可以不使用global關鍵字

Python3.5基礎之函數定義的示例分析

#函數內修改可變類型的全局變量——直接修改,無需使用global關鍵字
a = [100,200,300]
print("可變類型全局變量a:",a)
print("可變類型全局變量a的地址:%d" %id(a))

def test01():
 a.append(400)  
 print("test01函數內修改可變類型全局變量a:",a)
 print("test01函數內修改可變類型全局變量后a的地址:%d" %id(a))


def test02():
 print("test02函數內使用可變類型全局變量a:",a)
 print("test02函數內使用可變類型全局變量a的地址:%d" %id(a))

test01()
test02()

運行結果:

可變類型全局變量a: [100, 200, 300]
可變類型全局變量a的地址:18241896
test01函數內修改可變類型全局變量a: [100, 200, 300, 400]
test01函數內修改可變類型全局變量后a的地址:18241896
test02函數內使用可變類型全局變量a: [100, 200, 300, 400]
test02函數內使用可變類型全局變量a的地址:18241896

7、匿名函數

Python3.5基礎之函數定義的示例分析

示例代碼:

#匿名函數——lambda
#語法:lambda arg1[,arg2...]:表達式 默認return

num = lambda a,b:a+b
print(num(1,2))

運行結果:

3

Python3.5基礎之函數定義的示例分析

簡單應用(一):

#四則運算——利用lambda表達式
def operation(a,b,opt):
 re = opt(a,b)
 return re


num1 = int(input("請輸入第一個字符:"))
num2 = int(input("請輸入第二個字符:"))
result = operation(num1,num2,lambda a,b:a+b)
print(result)

運行結果:

請輸入第一個字符:2
請輸入第二個字符:3
5

簡單應用(二):

#列表中的字典元素進行排序——lambda表達式

students = [
 {"name":"Joe","age":"18"},
 {"name":"Tom","age":"20"},
 {"name":"Susan","age":"16"}
]

students.sort(key=lambda x:x["name"])  #對字典按照關鍵字name排序
print(students)

運行結果:

[{'age': '18', 'name': 'Joe'}, {'age': '16', 'name': 'Susan'}, {'age': '20', 'name': 'Tom'}]

8、遞歸函數

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

代碼示例:

#函數的嵌套
def test1():
 print("in test1...")

def test2():
 test1()
 print("in test2...")

def test3():
 test2()
 print("in test3...")

test3()

運行結果:

in test1...
in test2...
in test3...

#遞歸函數

def func(n):
 print("進入第%d層夢"%n)
 if n ==3:
  print("進入潛意識區")
 else:
  func(n+1)
 print("從第%d層夢中醒來"%n)

func(1)

運行結果:

進入第1層夢
進入第2層夢
進入第3層夢
進入潛意識區
從第3層夢中醒來
從第2層夢中醒來
從第1層夢中醒來

應用:求階乘

#階乘——利用while

i = 1
num = 1
while i <= 4:
 num = num*i
 i+=1

print(num)

#階乘——利用遞歸

def func01(n):
 if n ==1:
  return 1
 return n*func01(n-1)

print(func01(4))

運行結果:

24
24

利用遞歸實現階乘的原理過程:

Python3.5基礎之函數定義的示例分析

9、常用內置函數

Python3.5基礎之函數定義的示例分析

示例代碼:

#abs()——絕對值函數
num = -1
print(abs(num))

#sorted()——排序函數
list01 = [1,4,2,7,9,3]
print(sorted(list01))  #由小到大排序
print(sorted(list01,reverse=True))  #由大到小排序

#sum()——求和
print(sum(list01))

#round()——四舍五入,獲取指定位數的小數
print(round(3.1415926,2))

#pow()——乘方數(冪)
print(pow(2,3))

#isinstance——類型判斷
num1 = 5
print(isinstance(num1,int))

#eval()——執行表達式或字符串作為運算
print(eval("1+3"))

#exec()——執行Python語句
exec('print("Hello")')

運行結果:

1
[1, 2, 3, 4, 7, 9]
[9, 7, 4, 3, 2, 1]
26
3.14
8
True
4
Hello

10、高階函數

Python3.5基礎之函數定義的示例分析

示例代碼:

#常用高階函數

#map()
num1 = map(lambda x:x*2,[1,2,3,4,5])
print(num1)
for i in num1:  #遍歷map對象的內容
 print(i,end=" ")

print()

#filter()
num2 = filter(lambda x:x%2 == 1,[1,2,3,4,5,6,7,8,9,10])
print(num2)
for j in num2:  #遍歷filter對象的內容
 print(j,end=" ")

print()

#reduce()
from functools import reduce
print(reduce(lambda x,y:x+y,[1,2,3,4],10)) #10是起始值

運行結果:

<map object at 0x0059F730>
2 4 6 8 10
<filter object at 0x0059F890>
1 3 5 7 9
20

Python3.5基礎之函數定義的示例分析

name = ["joe","jack","TOM","suSAN"]
age = [17,18,20,15]
sex = ["M","M","M","F"]

#案例一——格式化英文名。首字母大寫,其他小寫
names = map(lambda t:t[0:1].upper()+t[1:].lower(),name)
for stu_name in names:
 print(stu_name,end=" ")

print()

#案例二——將三個序列結合到一起,形成一個集合
newStu = map(lambda n,a,s:(n,a,s),name,age,sex)
student = []
for tup in newStu:
 student.append(tup)

print(student)

#案例三——過濾性別為男的用戶
males = filter(lambda x:x[2] == "M",student)
man = []
for m in males:
 man.append(m)

print(man)

#案例四——求性別為男的用戶的平均年齡
from functools import reduce
man_count = len(man)
total_age = reduce(lambda x,y:x+y[1],man,0)
print("總年齡:",total_age)
print("平均年齡:%.2f" %(total_age/man_count))

運行結果:

Joe Jack Tom Susan
[('joe', 17, 'M'), ('jack', 18, 'M'), ('TOM', 20, 'M'), ('suSAN', 15, 'F')]
[('joe', 17, 'M'), ('jack', 18, 'M'), ('TOM', 20, 'M')]
總年齡: 55
平均年齡:18.33

11、約瑟夫環

(1)一群人圍在一起坐成環狀(如:N)

(2)從某個編號開始報數(如:K)

(3)數到某數(如:M)的時候,此人出列,下一個人重新報數

(4)一直循環,直到所有人出列,約瑟夫環結束

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

Python3.5基礎之函數定義的示例分析

約瑟夫環實現代碼:

#約瑟夫環問題
# n=9(總人數) m = 3(報數) k:索引
#k = (k+(m-1))%len(list)

def func(n,m):
 #生成一個列表
 people = list(range(1,n+1))
 k = 0  #定義開始的索引

 #開始循環報數
 while len(people) > 2:
  k = (k+(m-1))%len(people)
  print("kill:",people[k])
  del(people[k])
  print(k)
 return people

print(func(9,3))

運行結果:

kill: 3
2
kill: 6
4
kill: 9
6
kill: 4
2
kill: 8
4
kill: 5
2
kill: 2
1
[1, 7]

12、函數重載

在Python中,沒有函數重載,若非要使用函數重載,則后邊的同名函數會覆蓋掉前面的函數。

#函數重載
def test(x):
 print(x)

def test(x,y):
 print(x+y)

#test(1) #出錯
test(1,2) #覆蓋test(x)

運行結果:

3

13、函數的嵌套和閉包

(1)函數嵌套:在函數內部再定義新的函數

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#函數嵌套
def test():
 def test1():
  def test2():
   print("hello")
  return test2
 return test1


res = test()  #test函數返回值res是一個函數,等價于res ==> test1
re = res()  #res() ==>test1() ,test1函數返回值re是一個函數,re==>test2
re()   #re() ==> test2()

運行結果:

hello

(2)閉包:內部函數可以取到外部函數的局部變量

#閉包:內部函數可以取到外部函數的局部變量
def test(x):
 def test1(y):
  def test2(z):
   print(x+y+z)
  return test2
 return test1

res = test(10)
re = res(20)
re(30)

運行結果:

6

14、裝飾器

(1)形象舉例:照片與相框

Python3.5基礎之函數定義的示例分析
照片:被裝飾的對象,相框:裝飾對象。

裝飾作用:動態擴展裝飾,即:不會改變被裝飾的對象(照片)的內容,只是動態改變裝飾的對象(相框)。

(2)裝飾器修飾無參數的函數

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#裝飾器——日志管理
def log(func):    #log(func)==> func = delete(delete函數作為實參傳入到func)
 def warp():
  print("logger strating...")
  func()   #運行delete
  print("logger ending...")

 return warp

@log #用log來裝飾delete,等價于delete = log(delete) = warp
def delete():
 print("deleting...")

delete()   #執行warp

運行結果:

logger strating...
deleting...
logger ending...

(3)裝飾器修飾有參數和返回值的函數

#裝飾器修飾有參數、有返回值的函數
def log(func):    #log(func)==> func = delete(delete函數作為實參傳入到func)
 def warp(*args,**kwargs):
  print("logger strating...")
  res = func(*args,**kwargs)   #運行delete
  print(res)
  print("logger ending...")

 return warp

@log #用log來裝飾delete,等價于delete = log(delete) = warp
def delete(name,age):
 print("deleting...")
 print(name,age)
 return "delete success"

delete("liu",20)   #執行warp

運行結果:

logger strating...
deleting...
liu 20
delete success
logger ending...

(4)裝飾器自身帶有參數

#裝飾器帶有參數
def log(i):
 def warp1(func):
  def warp2(*args,**kwargs):
   print("logger strating...")
   if i>0:
    print("logging success...")
    func(*args, **kwargs)
   else:
    print("logging failed...")

   print("logger ending...")

  return warp2
 return warp1

@log(1)
def delete():
 print("deleting...")

delete()

運行結果:

logger strating...
logging success...
deleting...
logger ending...

#裝飾器帶有參數
def log(i):
 def warp1(func):
  def warp2(*args,**kwargs):
   print("logger strating...")
   if i>0:
    print("logging success...")
    func(*args, **kwargs)
   else:
    print("logging failed...")

   print("logger ending...")

  return warp2
 return warp1

@log(-1)
def delete():
 print("deleting...")

delete()

#logger strating...
logging failed...
logger ending...

15、迭代器

Python3.5基礎之函數定義的示例分析

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:ZhengzhengLiu

#迭代器——笛卡爾積

import itertools

x = range(1,6)
coml = itertools.combinations(x,3) #排列
coml2 = itertools.permutations(x,4) #組合

y = ["a","b","c"]

coml3 = itertools.product(x,y) #笛卡爾積

coml4 = itertools.chain(coml,coml2,coml3)
for h in coml4:
 print(h)

運行結果:

(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
(1, 2, 3, 4)
(1, 2, 4, 3)
(1, 3, 2, 4)
(1, 3, 4, 2)
(1, 4, 2, 3)
(1, 4, 3, 2)
(2, 1, 3, 4)
(2, 1, 4, 3)
(2, 3, 1, 4)
(2, 3, 4, 1)
(2, 4, 1, 3)
(2, 4, 3, 1)
(3, 1, 2, 4)
(3, 1, 4, 2)
(3, 2, 1, 4)
(3, 2, 4, 1)
(3, 4, 1, 2)
(3, 4, 2, 1)
(4, 1, 2, 3)
(4, 1, 3, 2)
(4, 2, 1, 3)
(4, 2, 3, 1)
(4, 3, 1, 2)
(4, 3, 2, 1)
(1, 'a')
(1, 'b')
(1, 'c')
(2, 'a')
(2, 'b')
(2, 'c')
(3, 'a')
(3, 'b')
(3, 'c')
(4, 'a')
(4, 'b')
(4, 'c')

以上是“Python3.5基礎之函數定義的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万年县| 休宁县| 土默特右旗| 万山特区| 阿瓦提县| 万州区| 肇源县| 任丘市| 临城县| 重庆市| 如东县| 平塘县| 五家渠市| 周宁县| 潼关县| 肥西县| 炎陵县| 泸西县| 澎湖县| 台东市| 博野县| 湾仔区| 比如县| 黔西县| 保靖县| 若尔盖县| 开江县| 英山县| 辉县市| 平罗县| 措勤县| 余江县| 阿拉善右旗| 永嘉县| 凤冈县| 依兰县| 思茅市| 杭锦旗| 蒙城县| 个旧市| 宣威市|