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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数,高级特性

發布時間:2024/9/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数,高级特性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


4.調用函數

(1)Python 內置了很多有用的函數,我們可以直接調用:
abs()? ##########求絕對值
cmp()?? #########比較大小
fact()?? #############遞歸函數實現


練習:
############實現遞歸函數####################################################

# n! = 1x2x3x4x.......(n-1)xn= (n-1)!xn = (n-2)!x(n-1)xn
1!??? =???? 1
2!??? =???? (2-1)! x 2????????????????????? =??? fact(2-1) x 2
3!??? =???? (3-1)! x 3?= (2-1)! x 2 x 3??? =??? fact(3-1) x 3?? =??fact(1)x 2 x3
###########
代碼:
def fact(n):??
??? if not isinstance(n,int):
??????? print 'input int num'
??? if n==1:
??????? return 1?? ###遞歸結束條件,當n==1時,結束
??? return fact(n-1)*n
print fact(10)
print fact(1)
注意:

1:在寫遞歸函數時要有一個明確的結束條件。
2:在遞歸時,問題規模要越來越小。
3:遞歸函數效率不高,函數調用是通過棧的數據結構實現的,每調用一次,棧就會多一層,最多999層,否則會出現棧溢出。
截圖:

#################################實現二分效果############################
當n=10時
返回值為
5
2
1

代碼:
def fun(n):?? ##########n是形式參數
??? if not isinstance(n, int):
??????? print 'input int num'
??? print n
??? b = int(n/2)
??? if b >0:
??????? return fun(b)
fun (10)

截圖:

(2)數據類型轉換函數:
int(), float(), str(),unicode(),bool()

5.理解函數名
函數名與變量名類似,其實就是指向一個函數對象的引用;
給這個函數起了一個“別名”:函數名賦給一個變量空函數


6.變量的作用域
局部變量:只能在函數內部使用的變量
全局變量:在整個程序中使用的變量
global關鍵字:強制將局部變量轉換為全局變量

代碼分析:

b=2???? #############全局變量,在整個代碼中生效。
def a():
??? b=1???###########局部變量,只在函數內生效。
??? print b
a()
print b

截圖:雖然給b賦值為1,但因為是局部變量所以輸出b為2


代碼分析:

b=2
def a():? #############全局變量,在整個代碼中生效。
??? global b? ##########聲明變量
??? b=1???? ###########局部變量,只在函數內生效。
??? print b
a()
print b
截圖:


##################函數式編程#############################
面向對象編程語言:java ,c++,python
面向過程編程語言:C
面向函數編程語言:(lisp,erlang)
截圖:







##############高級特性#############

1.列表生成式
列表生成式是Python 內置的非常簡單卻強大的可以用來創建list的生成式
方法一:for循環
方法二:列表生成式

(1)思考:

要生成 list [1, 2, 3, 4, 5, 6, 7] 可以用 range(1, 8)
但如果要生成 [1x1, 2x2, 3x3, ..., 7x7] 怎么做?

代碼:

list1=[]???? ###########建一個空列表接收執行結果
list = range(1,8)######建立一個列表
for x in list:? #####list1 中的值來源
??? a =x*x
??? list1.append(a)?? ###list1列表值的增加
print list1

截圖:


(2)思考:

列表生成式可以嵌套if語句和for語句么?
- 生成100以內所有偶數的平方;
- 生成‘ABC’與‘123’的全排列;


(3)思考
列表生成式也可以使用兩個變量來生成 list么?
- 生成字典的的內容,格式為‘key=value’,返回其列表
格式;
- 將list中所有的字符串變為小寫字母;


2.迭代
可以通過 for 循環來遍歷這個 list 或 tuple,這種遍歷我們稱為迭代(Iteration)
只要是可迭代對象,無論有無下標,都可以迭代,比如 dict就可以迭代:

(1)如何判斷一個對象是可迭代對象呢?

方法是通過 collections 模塊的 Iterable 類型判斷迭代

from collections import Iterable########導入 collections 模塊的 Iterable 類型

isinstance('hello',Iterable)??? ######判斷字符串是否是迭代
Out[9]: True

isinstance(1,Iterable)????????? ######判斷整形是否是迭代
Out[10]: False

isinstance([1,2,3],Iterable)?? ######判斷列表是否是迭代
Out[11]: True

isinstance({1,2,3},Iterable)? ######判斷集合是否是迭代
Out[12]: True

isinstance({"name":"zhang"},Iterable)######判斷字典是否是迭代
Out[13]: True

isinstance((1,2,3),Iterable)?? ######判斷元組是否是迭代
Out[14]: True

(2)枚舉方法,顯示為索引元素對。
代碼:
shopinfo =[
??? ('Iphone',1000),
??? ('book',200),
??? ('fentiao',3500)
]

for i ,v in enumerate(shopinfo):
??? print i,v
截圖:



(3)for 循環里,同時引用了兩個變量。
代碼:
shopinfo =[
??? ('Iphone',1000),
?? ?('book',200),
??? ('fentiao',3500)
]

for k,v in shopinfo:
??? print k,v

截圖:


3.生成器


(1)為什么需要生成器?
通過列表生成式,我們可以直接創建一個列表,受到內存限制,列表容量肯定是有限的;
創建一個包含 100 萬個元素的列表,占用很大的存儲空間;列表生成如果需要前幾個元素,浪費空間

(2)生成器是什么?
在循環的過程中不斷推算出后續的元素呢?這樣就不必創建完整的list,從而節省大量的空間。在 Python 中,這種一
邊循環一邊計算的機制,稱為生成器(Generator)

(3)怎么創建生成器?把一個列表生成式的 [] 改成 ()

使用g.next()方法依次讀取元素(麻煩)
截圖:


使用 for 循環(推薦)
代碼:
l= (i for i in range(10)) ############列表生成式
g= (i for i in range(10))? ##########生成器
from collections import Iterable??
isinstance(g,Iterable)? #####查看生成器是否迭代
Out[4]: True
type(g)????????????? #########查看g的類型
Out[5]: generator
for i in g:???? #####3使用 for 循環
??? if i < 5:
??????? print i
????????
0
1
2
3
4

截圖:


(4)python編程:

著名的斐波拉契數列(Fibonacci),除第一個和第二個數
外,任意一個數都可由前兩個數相加得到:1, 1, 2, 3,5, 8, 13, 21,...


代碼:
def fib(max):
???? n,a,b=0,0,1
???? while n < max:
???????? print b
???????? a,b = b,a+b
???????? n +=1
fib(4)

截圖:




(4)手動實現生成器:

########yield關鍵字#########
練習:通過改變以下代碼,然后觀察結果,了解yield關鍵字
def hello():
??? print 'a'
??? yield 1
??? print 'b'
??? yield 2
??? print 'c'
??? yield 3
a = hello()
print type(a)
print a.next()
print a.next()
print a.next()
截圖多個:



斐波拉契數列使用yield關鍵字截圖:



(5)異步I/O模型epoll??? http nginxtomcat

消費者代碼:
def consumer(name):
??? print '%s 準備吃粉條了!' %(name)
??? while True:
??? ???fentiao = yield
?????? print('粉條[%s]做出來了,被[%s]吃了')%(fentiao,name)
g = consumer("xiaobai")
g.next()
g.send('孜然味')
截圖:


生產者代碼:
import time
def producer(name):
??? c1 = consumer('xiaobai')
??? c2 = consumer('heidong')
??? c1.next()
??? c2.next()
??? print '開始制作粉條晚餐了.....'
??? for i in range(1,6):
??????? time.sleep(1)
??????? print '[%s]做了兩份粉條,兩個人一起吃'%(name)
??????? c1.send(i)
??????? c2.send(i)
producer('diner')

截圖:
?










本文轉自 如何何如? 51CTO博客,原文鏈接:http://blog.51cto.com/12778805/1946918,如需轉載請自行聯系原作者 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的函数,高级特性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。