1.Python基礎要點(一)

變量:變量可不定義,但一定要有賦值。

一、python基礎

1、輸出和輸入

輸出

在print()中輸入字符串,就可以向屏幕上輸出相應的字符串,如'hello world';

print()也可以接受多個字符串,用逗號隔開,每個逗號代表一個空格:

print()也可以打印和計算數字:

輸入

Python3版本中input默認接收到的是str類型,如:

結果如下:

如果想要接收的是數值型,則需要用int來進行強制轉換:

結果:

2、數據類型與變量

整型、浮點型、字符串、布爾值、變量、常量

3、字符串格式化

python的格式化和C一樣。

 

%d 整數
%f 浮點數
%s 字符串
%x 十六進制整數

 

%d:普通的輸出

 

%2d:按寬度爲2輸出,右對齊,若寬度不夠2,則在左邊補空格

%02d:和%2d差不多,不過在左邊補0

%2d和%02d從執行效果來說,差不多。

有些時候,字符串裏面的%是一個普通字符怎麼辦?這個時候就需要轉義,用%%來表示一個%

>>> 'growth rate: %d %%' % 7
'growth rate: 7 %'

例子:

print('Hello,%s!'%x)

4、list和tuple

list:列表(可變長度,可隨時增加和減少元素,元素內容可修改),裏面的數據類型可以不相同,[]

tuple:元組(長度不可變),()

set:同數學上的集合一樣:不重複無序的元素,無索引。

5、條件判斷

 

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

6、循環

 

for ... in XXX(...取XXX的 )

range(a,b,c):可看爲以a爲首項,c爲公差,且不超過b-1的等差數列。

7、字典和集合

定義:字典是一種大小可變的鍵值對集,其中的鍵和值都是Python對象,又稱哈希映射。

方法:插入、in、del/pop、keys(獲得鍵的列表)、values(獲得值的列表)

PS:字典調用不能像列表元組那樣用調用切片,需調用keys值。

和list比較,dict有以下幾個特點:

  1. 查找和插入的速度極快,不會隨着key的增加而變慢;
  2. 需要佔用大量的內存,內存浪費多。

而list相反:

  1. 查找和插入的時間隨着元素的增加而增加;
  2. 佔用空間小,浪費內存很少。

所以,dict是用空間來換取時間的一種方法。

dict可以用在需要高速查找的很多地方,在Python代碼中幾乎無處不在,正確使用dict非常重要,需要牢記的第一條就是dict的key必須是不可變對象。

這是因爲dict根據key來計算value的存儲位置,如果每次計算相同的key得出的結果不同,那dict內部就完全混亂了。這個通過key計算位置的算法稱爲哈希算法(Hash)。

要保證hash的正確性,作爲key的對象就不能變。在Python中,字符串、整數等都是不可變的,因此,可以放心地作爲key。而list是可變的,就不能作爲key:

set和dict的唯一區別僅在於沒有存儲對應的value,但是,set的原理和dict一樣,所以,同樣不可以放入可變對象,因爲無法判斷兩個可變對象是否相等,也就無法保證set內部“不會有重複元素”。

 

二、函數

 

1、定義函數:

在Python中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然後,在縮進塊中編寫函數體,函數的返回值用return語句返回。

 

請注意,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,並將結果返回。因此,函數內部通過條件判斷和循環可以實現非常複雜的邏輯。

如果沒有return語句,函數執行完畢後也會返回結果,只是結果爲None

return None可以簡寫爲return

如果你已經把my_abs()的函數定義保存爲abstest.py文件了,那麼,可以在該文件的當前目錄下啓動Python解釋器,用from abstest import my_abs來導入my_abs()函數,注意abstest是文件名(不含.py擴展名)

 

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

 

 

 

2、空函數

 

如果想定義一個什麼事也不做的空函數,可以用pass語句:

def nop():
    pass

pass語句什麼都不做,那有什麼用?實際上pass可以用來作爲佔位符,比如現在還沒想好怎麼寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。

pass還可以用在其他語句裏,比如:

if age >= 18:
    pass

缺少了pass,代碼運行就會有語法錯誤。

3、參數檢查

調用函數時,如果參數個數不對,Python解釋器會自動檢查出來,並拋出TypeError

>>> my_abs(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: my_abs() takes 1 positional argument but 2 were given

但是如果參數類型不對,Python解釋器就無法幫我們檢查。試試my_abs和內置函數abs的差別:

>>> my_abs('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in my_abs
TypeError: unorderable types: str() >= int()
>>> abs('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): 'str'

當傳入了不恰當的參數時,內置函數abs會檢查出參數錯誤,而我們定義的my_abs沒有參數檢查,會導致if語句出錯,出錯信息和abs不一樣。所以,這個函數定義不夠完善。

PS:abs只能接受整數和浮點型(文本型字符串是TypeError,數值型字符串待驗證),而內置的float函數可以接受數值型字符串(文本型字符串是ValueError)、整數。

讓我們修改一下my_abs的定義,對參數類型做檢查,只允許整數和浮點數類型的參數。數據類型檢查可以用內置函數isinstance()實現:

 

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type')
    if x >= 0:
        return x
    else:
        return -x

 

添加了參數檢查後,如果傳入錯誤的參數類型,函數就可以拋出一個錯誤:

>>> my_abs('A')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in my_abs
TypeError: bad operand type

錯誤和異常處理將在後續講到。

4、返回多個值

import math

def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny

 

其實,返回“多個值”在Python中返回的仍然是單一值,是一個tuple!但是,在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章