第六章 抽象

2021-09-01 08:14:09 字數 3397 閱讀 5231

抽象可節省人力,使程式能夠被人理解的關鍵所在。

一、自定義函式

定義函式用def函式:

def hello(name):

return 'hello,' +name+'!'

print (hello('world'))->hello, world!

這裡的hello就是新定義的函式,return語句中就是該函式的返回值。

2. callable( ):判斷函式是否被呼叫,被呼叫返回true,否則返回false.

3. return語句:用於退出函式,選擇性地向呼叫方返回乙個表示式。不帶引數值的return語句返回none.

注意:函式都必須有返回值的,如果沒有return語句,則預設返回乙個空值none.

def sum(arg1, arg2):

total=arg1+arg2

print('函式內:', total)

return total

#呼叫sum函式

total=sum(10,20)

print('函式外:', total)

返回:函式內:30

函式外:30

#如果沒有return語句則返回:

函式內:30

函式外:none

給函式編寫文件

#加注釋資訊

__doc__是函式的乙個屬性,屬性名中的雙下劃線表示這是乙個特殊的屬性。

二、函式魔法

引數從呼叫的角度來說,分為形式引數和實際引數(簡稱形參和實參);形參只是代表乙個位置,乙個變數名,而實參是乙個具體的內容,是賦值到變數名中的值!

關鍵字引數:即傳入實參時指定形參的變數名,儘管使用這種技巧要多打點字,但這種技巧非常有用。

def saysomething(name, words):

print(name+'->'+words)

saysomething(words="讓程式設計改變世界!」,name="小甲魚")

小甲魚->讓程式設計改變世界!

saysomething()->小甲魚->讓程式設計改變世界!

上面的name、words為形參,」讓程式設計改變世界「是實參,而words="讓程式設計改變世界"則是關鍵字引數.

預設引數:即不輸入任何引數的情況下會有預設值列印出來,使用預設引數的話,就可以不帶引數去呼叫引數。

收集引數:(也陳可變引數),即在引數前新增乙個星號(),如果要將多個引數傳入到函式中,也是需要用加列表名才能正常呼叫;星號不能收集關鍵字引數,如果要收集需要使用兩個星號(**),其可以將引數打包成字典的形式(關鍵字引數)。

def test(*params):

print ("有%d個引數" %len(params))

print("第二個引數是:", params[1])

a=[1,2,3,4,5,6,7,8]

test(a) ->有乙個引數 error...

test(*a)->有8個引數 第二個引數是:2

作用域:(區域性變數和全域性變數)

def discounts(price, rate):

final_price= price*rate

return final_price

old_price=float(input('請輸入原價:'))

rate=float(input('請輸入折扣率:'))

new_price=discount(old_price, rate)

print('打折後**是:』,new_price)

請輸入原價:80

請輸入折扣率:0.75

打折後的**是:60.0

這個函式中price/rate/final_price是整個函式的區域性變數,而old_price/rate/new_price則是全域性變數。區域性變數的作用範圍只在函式內部,除了這個函式discounts區域性變數變不起作用;而全域性變數在整個**段中都是可以訪問的,但是不要試圖在函式內部修改全域性變數的值,這樣會導致python自動在函式內部新建乙個名字一樣的區域性變數,很容易犯錯。一般千萬不要再函式內部修改全域性變數,會使得**非常麻煩。如果非要修改,則要用到global函式。

count=5

def myfun():

global count

count=10

print(count)

myfun()->10

內嵌函式:python的函式定義是可以巢狀的,也就是允許在函式內部建立另乙個函式,這種函式叫做內嵌函式或者內部函式。

閉包:如果在乙個內部函式裡,對在外部作用域(但不在全域性作用域)的變數進行引用,那麼內部函式就被認為是閉包。

def funx(x):

def funy(y):

return x*y

return funy

i=funx(8)

i(5)->40.

如果在乙個內部函式裡(funy就是這個內部函式)對外部作用域(但不是在全域性作用域)的變數進行引用(x就是被引用的變數,x在外部作用域funx函式裡面,但不在全域性作用域裡)則這個內部函式funy就是乙個閉包。

nonlocal也可以在內部函式裡修改外部函式裡的區域性變數值,使用方法與global一致 。

def funx():

x=5def funy():

nonlocal x

x*=x

return x

rerurn funy

funx()()->25.

三、遞迴

遞迴即呼叫自身。

def factorial(n):

if n==1:

return 1

else:

return n*factorial(n-1)

四、lambda表示式

python允許使用lambda關鍵字來建立匿名函式。

語法:lambda x: 2*x+1

其語法結構非常精簡,冒號左邊放原函式的引數,可以有多個引數,用逗號隔開,冒號右邊是返回值。如果lambda語句是返回乙個物件,則需要對它進行賦值操作

g=lambda x:2*x+1

g(5)->11

g=lambda x,y:x+y

g(3,4)->7

#lambda也可以使用關鍵字引數

g=lambda x, y: x**2+y**2

g(2,3)->13

g(y=4, x=3)->25

lambda表示式的作用:

1)可以省下定義函式過程,也不需要命名函式,使得**更為精簡;

2)簡化**可讀性

兩個內建函式

mysql第六章 第六章 mysql日誌

第六章 mysql日誌 一 錯誤日誌 錯誤日誌的預設存放路徑是 mysql 存放資料的地方 hostname.err 1.修改錯誤日誌存放路徑 mysqld log error data mysql mysql.log 2.檢視配置命令 show variables like log error 3...

第六章 指標

1.多位元組資料的位址是在最左邊還是最右邊的位置,不同的機器有不同的規定,這也正是大端和小端的區別,位址也要遵從邊界對齊 2.高階語言的乙個特性就是通過名字而不是位址來訪問記憶體的位置,但是硬體仍然通過位址訪問記憶體位置 3.記憶體中的變數都是義序列的0或1的位,他們可以被解釋為整數或者其他,這取決...

第六章總結

6.1 使用滑鼠 6.1.1 滑鼠時間和滑鼠訊息 根據使用者操作滑鼠時滑鼠的位置,滑鼠訊息分為兩類 客戶區滑鼠訊息和非客戶區滑鼠訊息。1.客戶去滑鼠訊息 2.當滑鼠游標位於視窗的使用者區時,將生成客戶滑鼠訊息。滑鼠訊息和鍵盤訊息有所不同,windows 只將鍵盤有訊息傳送給具有輸入極點的視窗,但滑鼠...