python之路金角大王_Python 之路03 - Python基础3
本節內容
函數與函數式編程
函數式編程之參數詳解
局部變量與全局變量作用域
嵌套函數
遞歸
函數式編程介紹
高階函數
內置函數
1. 函數與函數式編程
1.面向對象:華山派---》類---》class
2.面向過程:少林派---》過程---》def
3.函數式編程:逍遙派---》函數---》def
函數過程區別:
def func1():
#函數
print('in the func1')
return 0
def func2():
#過程
print('in the func2')
#過程沒有返回值
x=func1()
y=func2()
print("from func1 return is %s" %x)
print("from func2 return is %s" %y)
為什么要使用函數??
代碼重用
保持一致
可擴展性
import time
def logger():
time_format = '%Y-%m-%d %X'
time_current = time.strftime(time_format)
with open('a.txt','a+') as f:
f.write('%s end action\n' %time_current)
def test1():
print('in the test1')
logger()
def test2():
print('in the test2')
logger()
def test3():
print('in the test3')
logger()
test1()
test2()
test3()
2. 函數式編程之參數詳解
函數返回值:
def test1():
print("this is test1")
def test2():
print("this is test2")
return 1
def test3():
print("this is test3")
return 0,10,'hello',['alxe','lb'],{'wf':'ss'}
x=test1()
y=test2()
z=test3()
print(x)
print(y)
print(z)
總結:
返回值數=0,返回None
返回值數=1,返回object
返回值數>1,返回tuple(元組)
參數:
1.形參和實參
2.位置參數和關鍵字
標準調用-實參與形參位置一一對應
關鍵字調用-位置無需固定
3.默認參數
4.參數組
#*args:接受N個位置參數,轉換為元組的方式
def test(*args):
print(args)
test(1,2,4,5,6)
test(*[1,2,3]) # args=tuple([1,2,3])
#和其他參數一起使用,實現可擴展的功能
def test1(x,*args):
print(x)
print(args)
test1(1,2,3,4,5)
#**kwargs:接受N個關鍵字參數,轉換成字典的方式
def test2(**kwargs):
print(kwargs)
test2(name='alex',age=8,sex='F')
test2(**{'name':'alex','age':8,'sex':'F'})
#和其他參數一起使用,實現可擴展的功能
def test3(name,**kwargs):
print(name)
print(kwargs)
test3('alex',age=8,sex='F')
3. 局部變量與全局變量作用域
school = "Oldboy edu."
def change_name(name):
global school
#如果需要修改全局變量,需要先申明
print("before change,name:%s,school:%s" %(name,school))
name="Alex Li" #這里是局部變量,這個函數就是這個函數的作用域
school = "Mage Linux"
print("after change,name:%s,school:%s" %(name,school))
name = "alex"
change_name(name)
print("name:",name)
print("school:",school)
ps:稍微復雜的類型,如【列表 字典 集合 類】等都能直接改數據
names = ['Alex','Jack','Rain']
def change_name():
names[0] = '金角大王'
print("inside:",names)
change_name()
print("outside:",names)
全局與局部變量
在子程序中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。
全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。
當全局變量與局部變量同名時:
在定義局部變量的子程序內,局部變量起作用;在其它地方全局變量起作用。
4. 遞歸
def calc(n):
print(n)
if int(n/2) > 0:
return calc(int(n/2))
print("->",n)
calc(10)
遞歸特性:
1.必須有一個明確的結束條件
2.每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少
3.遞歸效率不高,遞歸層次過多會導致棧溢出
(在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出)
5. 函數式編程介紹
函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把復雜任務分解成簡單的任務,這種分解可以稱之為面向過程的程序設計。函數就是面向過程的程序設計的基本單元。
函數式編程中的函數這個術語不是指計算機中的函數(實際上是Subroutine),而是指數學中的函數,即自變量的映射。也就是說一個函數的值僅決定于函數參數的值,不依賴其他狀態。比如sqrt(x)函數計算x的平方根,只要x不變,不論什么時候調用,調用幾次,值都是不變的。
Python對函數式編程提供部分支持。由于Python允許使用變量,因此,Python不是純函數式編程語言。
一、定義
簡單說,"函數式編程"是一種"編程范式"(programming paradigm),也就是如何編寫程序的方法論。
主要思想是把運算過程盡量寫成一系列嵌套的函數調用。舉例來說,現在有這樣一個數學表達式:
(1 + 2) * 3 - 4
傳統的過程式編程,可能這樣寫:
var a = 1 + 2;
var b = a * 3;
var c = b - 4;
函數式編程要求使用函數,我們可以把運算過程定義為不同的函數,然后寫成下面這樣:
var result = subtract(multiply(add(1,2), 3), 4);
這段代碼再演進以下,可以變成這樣
add(1,2).multiply(3).subtract(4)
這基本就是自然語言的表達了。再看下面的代碼,大家應該一眼就能明白它的意思吧:
merge([1,2],[3,4]).sort().search("2")
因此,函數式編程的代碼更容易理解。
要想學好函數式編程,不要玩py,玩Erlang,Haskell, 好了,我只會這么多了。。。
6. 高階函數
變量可以指向函數,函數的參數能接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數。
def add(a,b,f):
return f(a)+f(b)
res = add(3,-6,abs)
print(res)
程序練習
程序1: 實現簡單的shell sed替換功能
程序2:修改haproxy配置文件
需求:
1、查
輸入:www.oldboy.org
獲取當前backend下的所有記錄
2、新建
輸入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}
3、刪除
輸入:
arg = {
'bakend': 'www.oldboy.org',
'record':{
'server': '100.1.7.9',
'weight': 20,
'maxconn': 30
}
}
global
log 127.0.0.1 local2
daemon
maxconn 256
log 127.0.0.1 local2 info defaults
log global
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
option dontlognull
listen stats :8888
stats enable
stats uri /admin
stats auth admin:1234
frontend oldboy.org
bind 0.0.0.0:80
option httplog
option httpclose
option forwardfor
log global
acl www hdr_reg(host) -i www.oldboy.org
use_backend www.oldboy.org if www
backend www.oldboy.org
server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
原配置文件
總結
以上是生活随笔為你收集整理的python之路金角大王_Python 之路03 - Python基础3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringSecurity之授权
- 下一篇: re正则表达式匹配多行文本