第7課 函數(shù)及其進制位運算

局部變量,就是在函數(shù)內(nèi)部定義的變量

不同的函數(shù),可以定義相同的名字的局部變量,但是各用個的不會產(chǎn)生影響

局部變量的作用,為了臨時保存數(shù)據(jù)需要在函數(shù)中定義變量來進行存儲,這就是它的作用

在函數(shù)外邊定義的變量叫做全局變量

全局變量能夠在所有的函數(shù)中進行訪問

如果在函數(shù)中修改全局變量,那么就需要使用global進行聲明,否則出錯(在其他函數(shù)中,只要用global進行了全局變量的說明,那么接下來在這個函數(shù)中使用這個變量的使用,就當做是一個全局變量來用)

如果全局變量的名字和局部變量的名字相同,那么使用的是局部變量的,小技巧強龍不壓地頭蛇

匿名函數(shù)

用lambda關(guān)鍵詞能創(chuàng)建小型匿名函數(shù)。這種函數(shù)得名于省略了用def聲明函數(shù)的標準步驟。

lambda函數(shù)的語法只包含一個語句,如下:

lambda [arg1 [,arg2,.....argn]]:expression


Lambda函數(shù)能接收任何數(shù)量的參數(shù)但只能返回一個表達式的值

匿名函數(shù)不能直接調(diào)用print,因為lambda需要一個表達式


函數(shù)使用注意事項

1. 自定義函數(shù)

<1>無參數(shù)、無返回值

? ? ? ? def 函數(shù)名():

? ? ? ? 語句

<2>無參數(shù)、有返回值

? ? ? def 函數(shù)名():

? ? ? 語句

? ? ?return 需要返回的數(shù)值

注意:

一個函數(shù)到底有沒有返回值,就看有沒有return,因為只有return才可以返回數(shù)據(jù)

在開發(fā)中往往根據(jù)需求來設計函數(shù)需不需要返回值

函數(shù)中,可以有多個return語句,但是只要執(zhí)行到一個return語句,那么就意味著這個函數(shù)的調(diào)用完成

<3>有參數(shù)、無返回值

? ? ?def 函數(shù)名(形參列表):

? ? ?語句

注意:

在調(diào)用函數(shù)時,如果需要把一些數(shù)據(jù)一起傳遞過去,被調(diào)用函數(shù)就需要用參數(shù)來接收

參數(shù)列表中變量的個數(shù)根據(jù)實際傳遞的數(shù)據(jù)的多少來確定

<4>有參數(shù)、有返回值

? ? def 函數(shù)名(形參列表):

? ? 語句

? ?return 需要返回的數(shù)值

<5>函數(shù)名不能重復

? ? ? 2. 調(diào)用函數(shù)

<1>調(diào)用的方式為: ? ? ? ? ? ? ?函數(shù)名([實參列表])

<2>調(diào)用時,到底寫不寫 實參

如果調(diào)用的函數(shù) 在定義時有形參,那么在調(diào)用的時候就應該傳遞參數(shù)

<3>調(diào)用時,實參的個數(shù)和先后順序應該和定義函數(shù)中要求的一致

<4>如果調(diào)用的函數(shù)有返回值,那么就可以用一個變量來進行保存這個值

3. 作用域

在一個函數(shù)中定義的變量,只能在本函數(shù)中用


什么是進制

1)理解個X進制的概念 :

每一位 只允許出現(xiàn) 0~X-1 這幾個數(shù)字,逢X進一,基是X, 每一位有一個權(quán)值大小是X的冪次。 其表示的數(shù)值可以寫成按位權(quán)展開的多項式之和。

如何表示二進制數(shù)的正負?

3)有符號數(shù)和無符號數(shù)的概念

規(guī)則:把二進制數(shù)中的最高位(最左邊的那位)用作符號位

對于有符號數(shù),最高位被計算機系統(tǒng)規(guī)定為符號位(0為正,1為負)

對于無符號數(shù),最高位被計算機系統(tǒng)規(guī)定為數(shù)據(jù)位

按照這種說法,比如有符號數(shù) +2? -2 的原碼形式:

+2 ? = ? ?0000 0000 0000 0010

-2 ? ?= ? ?1000 0000 0000 0010

真值? ? ? 機器數(shù)

+1 = 0000 0000 0000 0001


規(guī)則

數(shù)字在計算機中,是用二進制補碼的形式來保存的,因此-1 +1需要按照補碼進行相加才是正確的結(jié)果

2、原碼、反碼、補碼

1)如何計算補碼?

規(guī)則:

正數(shù):原碼 = 反碼 = 補碼

負數(shù):反碼 = 符號位不變,其他位取反 ? ? ? ? ? ? ? ??補碼 = 反碼+1

從補碼轉(zhuǎn)回原碼

負數(shù)補碼轉(zhuǎn)換原碼的規(guī)則:

原碼 = 補碼的符號位不變 -->數(shù)據(jù)位取反--> 尾+1

<1>位運算的介紹

& 按位與

| 按位或

^ 按位異或

~ 按位取反

<< 按位左移

>> 按位右移

用途: 直接操作二進制,省內(nèi)存,效率高

1)<< 按位左移 ? ? ??各二進位全部左移n位,高位丟棄,低位補0


x << n 左移 x 的所有二進制位向左移動n位,移出位刪掉,移進的位補零

【注意事項】

a. 左移1位相當于 乘以2

用途:快速計算一個數(shù)乘以2的n次方 (8<<3 等同于8*2^3)

b.左移可能會改變一個數(shù)的正負性
2)>> 右移

各二進位全部右移n位,保持符號位不變

x >> n x的所有二進制位向右移動n位,移出的位刪掉,移進的位補符號位 右移不會改變一個數(shù)的符號

右移1位相當于 除以2

x 右移 n 位就相當于除以2的n次方 用途:快速計算一個數(shù)除以2的n次方 (8>>3 等同于8/2^3)


3) ? & ? ? 按位與

全1才1否則0 :只有對應的兩個二進位均為1時,結(jié)果位才為1,否則為0

4) ? ?| ? ? 按位或

有1就1 只要對應的二個二進位有一個為1時,結(jié)果位就為1,否則為0

5) ^ 按位異或

不同為1 當對應的二進位相異(不相同)時,結(jié)果為1,否則為0

6) ~ 取反

~9 =-10


【擴展】

1)任何數(shù)和1進行&操作,得到這個數(shù)的最低位 數(shù)字&1 = 數(shù)字的二進制形式的最低位

2)位運算優(yōu)先級


數(shù)據(jù)類型轉(zhuǎn)換

1.常用的數(shù)據(jù)類型轉(zhuǎn)換



2. 進制轉(zhuǎn)換

<1>不同進制的書寫方式

八進制(Octal) 0o377

十六進制(Hex) 0xFF

二進制(Binary) 0b11111111

<2>不同進制之間的轉(zhuǎn)換

python提供了三個內(nèi)置的函數(shù),可以用來在不同進制間做轉(zhuǎn)換

>>> oct(255), hex(255), bin(255)

('0o377', '0xff', '0b11111111')

還可以使用int函數(shù),把字符串轉(zhuǎn)成數(shù)值

>>> int('255'), int('0xFF', 16) ? ? (16進制的意思)

(255, 255)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容