人生苦短,我學(xué)Python(二)

這兩天斷斷續(xù)續(xù)看了看Python開發(fā)相關(guān)的教程(入門級(jí)),教程來(lái)自于廖雪峰的Python教程,算是比較適合新手的教程了,幾乎不需要你事先了解任何的編程相關(guān)支持,直接就能上手。

說說這兩天學(xué)的吧,首先學(xué)習(xí)一種計(jì)算機(jī)語(yǔ)言肯定是先搭建好這種語(yǔ)言的開發(fā)環(huán)境,這樣你才能敲出hello world嘛。其實(shí)Python的開發(fā)環(huán)境搭建非常簡(jiǎn)單,Mac自帶Python2,如果需要使用Python3,直接去Python官網(wǎng)下載就行,安裝也十分簡(jiǎn)單,不會(huì)就自行百度 OR Google,這里就不說了。

另外如果你需要編寫Python程序,或者執(zhí)行.py文件,你還需要下載一個(gè)合適的Python解釋器,其實(shí)就是執(zhí)行你的Python程序或文件的應(yīng)用,市面上有很多,我使用的是 JetBrains 公司開發(fā)的 Pycharm ,個(gè)人覺得還不錯(cuò)。

Hello World!

上面兩樣?xùn)|西準(zhǔn)備好之后,就可以學(xué)習(xí)Python了,按照學(xué)習(xí)計(jì)算機(jī)語(yǔ)言的慣例,先來(lái)一波Hello World!,代碼如下:

print('Hello World!')

是不是簡(jiǎn)單極了?一行代碼搞定,也不需要各種import引入各種庫(kù)啥的。讓我們看看其他幾種語(yǔ)言的Hello World程序?qū)懛ǎ?/p>

  • C/C++
#include 
int main()
{
    printf("Hello World!/n");
    return 0;
}
  • C#
using System;
class Hello
{
    public static void Main()
    {
        Console.WriteLine("Hello World!");
    }
}
  • Java
class Hello
{
    public static void main(String ars[])
    {
        System.out.print("Hello World!/n");
    }
}

哎喲,這些玩意兒真麻煩,果然是Python簡(jiǎn)潔、優(yōu)雅。當(dāng)然還有其他的語(yǔ)言也挺簡(jiǎn)潔的,例如Ruby。

簡(jiǎn)單數(shù)據(jù)類型

然后,我們瞧瞧比較基礎(chǔ)的數(shù)據(jù)類型這一塊。Python中的支持的數(shù)據(jù)類型有以下幾種:

  • 整數(shù)

Python可以處理任意大小的整數(shù),當(dāng)然包括負(fù)整數(shù),在程序中的表示方法和數(shù)學(xué)上的寫法一模一樣,如:1,100-8080,0,等等。另外除了十進(jìn)制,二進(jìn)制、八進(jìn)制、十六進(jìn)制也是支持的。

  • 浮點(diǎn)數(shù)

浮點(diǎn)數(shù)其實(shí)就是我們數(shù)學(xué)中經(jīng)常用到的小數(shù),之所以叫做浮點(diǎn)數(shù),因?yàn)榘凑湛茖W(xué)計(jì)數(shù)法的表示方法,小數(shù)的小數(shù)點(diǎn)位置是可以變化的。

浮點(diǎn)數(shù)可以直接用數(shù)學(xué)中的小數(shù)寫法來(lái)寫,例如0.01、3.1415、-10.0等。但是對(duì)于很大或者很小的浮點(diǎn)數(shù),就必須使用科學(xué)計(jì)數(shù)法來(lái)表述,把科學(xué)計(jì)數(shù)法中的10用e替代,1.23e9,12.3e8,0.000012可以寫成1.2e-5等。

  • 字符串

字符串是以單引號(hào)'或雙引號(hào)"括起來(lái)的任意文本,比如'abc',"xyz"等等。請(qǐng)注意,''""本身只是一種表示方式,不是字符串的一部分,因此,字符串'abc'只有ab,c這3個(gè)字符。如果'本身也是一個(gè)字符,那就可以用""括起來(lái),比如"I'm OK"包含的字符是I,',m,空格,O,K這6個(gè)字符。

TIPS:如果字符串內(nèi)部既包含'又包含"怎么辦?可以用轉(zhuǎn)義字符\來(lái)標(biāo)識(shí),比如:

print('I\' \"OK\"!')

輸入的結(jié)果是:I'm OK!

  • 布爾值

布爾值和布爾代數(shù)的表示完全一致,一個(gè)布爾值只有TrueFalse兩種值,要么是True,要么是False,在Python中,可以直接用True、False表示布爾值(請(qǐng)注意大小寫)。

  • 空值

空值是Python里一個(gè)特殊的值,用None表示。None不能理解為0,因?yàn)?code>0是有意義的,而None是一個(gè)特殊的空值。

此外,Python還提供了列表、字典等多種數(shù)據(jù)類型,還允許創(chuàng)建自定義數(shù)據(jù)類型,后面我學(xué)習(xí)到那兒的時(shí)候再說這個(gè)。

變量

變量的概念基本上和初中代數(shù)的方程變量是一致的,只是在計(jì)算機(jī)程序中,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類型。

變量在程序中就是用一個(gè)變量名表示了,變量名必須是大小寫英文、數(shù)字和_的組合,且不能用數(shù)字開頭,比如:

a = 1

變量a是一個(gè)整數(shù)。

t_007 = 'T007'

變量t_007是一個(gè)字符串。

Answer = True

變量Answer是一個(gè)布爾值True。

在Python中,等號(hào)=是賦值語(yǔ)句,可以把任意數(shù)據(jù)類型賦值給變量,同一個(gè)變量可以反復(fù)賦值,而且可以是不同類型的變量,例如:

a = 123 # a是整數(shù)
print(a)
a = 'ABC' # a變?yōu)樽址?print(a)

這種變量本身類型不固定的語(yǔ)言稱之為動(dòng)態(tài)語(yǔ)言,與之對(duì)應(yīng)的是靜態(tài)語(yǔ)言。靜態(tài)語(yǔ)言在定義變量時(shí)必須指定變量類型,如果賦值的時(shí)候類型不匹配,就會(huì)報(bào)錯(cuò)。例如Java是靜態(tài)語(yǔ)言,賦值語(yǔ)句如下(// 表示注釋):

int a = 123; // a是整數(shù)類型變量
a = "ABC"; // 錯(cuò)誤:不能把字符串賦給整型變量

和靜態(tài)語(yǔ)言相比,動(dòng)態(tài)語(yǔ)言更靈活,就是這個(gè)原因。

請(qǐng)不要把賦值語(yǔ)句的等號(hào)等同于數(shù)學(xué)的等號(hào)。比如下面的代碼:

x = 10
x = x + 2

如果從數(shù)學(xué)上理解x = x + 2那無(wú)論如何是不成立的,在程序中,賦值語(yǔ)句先計(jì)算右側(cè)的表達(dá)式x + 2,得到結(jié)果12,再賦給變量x。由于x之前的值是10,重新賦值后,x的值變成12。

最后,理解變量在計(jì)算機(jī)內(nèi)存中的表示也非常重要。當(dāng)我們寫:

a = 'ABC'

時(shí),Python解釋器干了兩件事情:

  1. 在內(nèi)存中創(chuàng)建了一個(gè)'ABC'的字符串;
  2. 在內(nèi)存中創(chuàng)建了一個(gè)名為a的變量,并把它指向'ABC'。

也可以把一個(gè)變量a賦值給另一個(gè)變量b,這個(gè)操作實(shí)際上是把變量b指向變量a所指向的數(shù)據(jù),例如下面的代碼:

a = 'ABC'
b = a
a = 'XYZ'
print(b)

最后一行打印出變量b的內(nèi)容到底是'ABC'呢還是'XYZ'?如果從數(shù)學(xué)意義上理解,就會(huì)錯(cuò)誤地得出ba相同,也應(yīng)該是'XYZ',但實(shí)際上b的值是'ABC',讓我們一行一行地執(zhí)行代碼,就可以看到到底發(fā)生了什么事:

執(zhí)行a = 'ABC',解釋器創(chuàng)建了字符串'ABC'和變量a,并把a指向'ABC'

py-var-code-1
py-var-code-1

執(zhí)行b = a,解釋器創(chuàng)建了變量b,并把b指向a指向的字符串'ABC'

py-var-code-2
py-var-code-2

執(zhí)行a = 'XYZ',解釋器創(chuàng)建了字符串'XYZ',并把a的指向改為'XYZ',但b并沒有更改:

py-var-code-3
py-var-code-3

所以,最后打印變量b的結(jié)果自然是'ABC'了。

常量

所謂常量就是不能變的變量,比如常用的數(shù)學(xué)常數(shù)π就是一個(gè)常量。在Python中,通常用全部大寫的變量名表示常量:

PI = 3.14159265359

但事實(shí)上PI仍然是一個(gè)變量,Python根本沒有任何機(jī)制保證PI不會(huì)被改變,所以,用全部大寫的變量名表示常量只是一個(gè)習(xí)慣上的用法,如果你一定要改變變量PI的值,也沒人能攔住你。

最后解釋一下整數(shù)的除法為什么也是精確的。在Python中,有兩種除法,一種除法是/

>>> 10 / 3
3.3333333333333335

/除法計(jì)算結(jié)果是浮點(diǎn)數(shù),即使是兩個(gè)整數(shù)恰好整除,結(jié)果也是浮點(diǎn)數(shù):

>>> 9 / 3
3.0

還有一種除法是//,稱為地板除,兩個(gè)整數(shù)的除法仍然是整數(shù):

>>> 10 // 3
3

你沒有看錯(cuò),整數(shù)的地板除//永遠(yuǎn)是整數(shù),即使除不盡。要做精確的除法,使用/就可以。

因?yàn)?code>//除法只取結(jié)果的整數(shù)部分,所以Python還提供一個(gè)余數(shù)運(yùn)算,可以得到兩個(gè)整數(shù)相除的余數(shù):

>>> 10 % 3
1

無(wú)論整數(shù)做//除法還是取余數(shù),結(jié)果永遠(yuǎn)是整數(shù),所以,整數(shù)運(yùn)算結(jié)果永遠(yuǎn)是精確的。

條件判斷

計(jì)算機(jī)之所以能做很多自動(dòng)化的任務(wù),因?yàn)樗梢宰约鹤鰲l件判斷。

比如,輸入用戶年齡,根據(jù)年齡打印不同的內(nèi)容,在Python程序中,用if語(yǔ)句實(shí)現(xiàn):

age = 20
if age >= 18:
    print('your age is', age)
    print('adult')

根據(jù)Python的縮進(jìn)規(guī)則,如果if語(yǔ)句判斷是True,就把縮進(jìn)的兩行print語(yǔ)句執(zhí)行了,否則,什么也不做。

也可以給if添加一個(gè)else語(yǔ)句,意思是,如果if判斷是False,不要執(zhí)行if的內(nèi)容,去把else執(zhí)行了:

age = 3
if age >= 18:
    print('your age is', age)
    print('adult')
else:
    print('your age is', age)
    print('teenager')

注意不要少寫了冒號(hào):。

當(dāng)然上面的判斷是很粗略的,完全可以用elif做更細(xì)致的判斷:

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

elifelse if的縮寫,完全可以有多個(gè)elif,所以if語(yǔ)句的完整形式就是:

if <條件判斷1>:
    <執(zhí)行1>
elif <條件判斷2>:
    <執(zhí)行2>
elif <條件判斷3>:
    <執(zhí)行3>
else:
    <執(zhí)行4>

if語(yǔ)句執(zhí)行有個(gè)特點(diǎn),它是從上往下判斷,如果在某個(gè)判斷上是True,把該判斷對(duì)應(yīng)的語(yǔ)句執(zhí)行后,就忽略掉剩下的elifelse,所以,請(qǐng)測(cè)試并解釋為什么下面的程序打印的是teenager

age = 20
if age >= 6:
    print('teenager')
elif age >= 18:
    print('adult')
else:
    print('kid')

if判斷條件還可以簡(jiǎn)寫,比如寫:

if x:
    print('True')

只要x是非零數(shù)值、非空字符串、非空l(shuí)ist等,就判斷為True,否則為False。

函數(shù)的調(diào)用與定義

  • 函數(shù)調(diào)用

Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。

要調(diào)用一個(gè)函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對(duì)值的函數(shù)abs,只有一個(gè)參數(shù)。

也可以在交互式命令行通過help(abs)查看abs函數(shù)的幫助信息。調(diào)用abs函數(shù):

>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34

調(diào)用函數(shù)的時(shí)候,如果傳入的參數(shù)數(shù)量不對(duì),會(huì)報(bào)TypeError的錯(cuò)誤,并且Python會(huì)明確地告訴你:abs()有且僅有1個(gè)參數(shù),但給出了兩個(gè):

>>> abs(1, 2)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: abs() takes exactly one argument (2 given)

如果傳入的參數(shù)數(shù)量是對(duì)的,但參數(shù)類型不能被函數(shù)所接受,也會(huì)報(bào)TypeError的錯(cuò)誤,并且給出錯(cuò)誤信息:str是錯(cuò)誤的參數(shù)類型:

>>> abs('a')
Traceback (most recent call last):
  File "", line 1, in 
TypeError: bad operand type for abs(): 'str'

max函數(shù)max()可以接收任意多個(gè)參數(shù),并返回最大的那個(gè):

>>> max(1, 2)
2
>>> max(2, 3, 1, -5)
3
  • 函數(shù)定義

在Python中,定義一個(gè)函數(shù)要使用def語(yǔ)句,依次寫出函數(shù)名、括號(hào)、括號(hào)中的參數(shù)和冒號(hào):,然后,在縮進(jìn)塊中編寫函數(shù)體,函數(shù)的返回值用return語(yǔ)句返回。

我們以自定義一個(gè)求絕對(duì)值的my_abs函數(shù)為例:

def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x

請(qǐng)自行測(cè)試并調(diào)用my_abs看看返回結(jié)果是否正確。

請(qǐng)注意,函數(shù)體內(nèi)部的語(yǔ)句在執(zhí)行時(shí),一旦執(zhí)行到return時(shí),函數(shù)就執(zhí)行完畢,并將結(jié)果返回。因此,函數(shù)內(nèi)部通過條件判斷和循環(huán)可以實(shí)現(xiàn)非常復(fù)雜的邏輯。

如果沒有return語(yǔ)句,函數(shù)執(zhí)行完畢后也會(huì)返回結(jié)果,只是結(jié)果為None。return None可以簡(jiǎn)寫為return

下次再會(huì)~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容