Python基礎
文章目錄
變量定義
變量的概念基本上和初中代數的方程變量是一致的,只是在計算機程序中,變量不僅可以是數字,還可以是任意數據類型。
變量在程序中就是用一個變量名錶示了,變量名必須是大小寫英文、數字和_的組合,且不能用數字開頭,比如:
a = 1
字符串的格式化
格式化有兩種方法:
利用百分號(%)
利用format函數
利用百分號格式化
在字符串中,利用%表示一個特殊的含義,表示對字符進行格式化%d: 此處應該放入一個整數%s: 表示此處應該放入一個字符串:
print("I love %s"%"C++")
輸出結果爲:I love C++
format函數格式化字符串
直接用format函數進行格式化- 推薦使用這種方法。
在使用上,以{}和.代替%號,後面用format帶參數完成format函數格式化字符串。
s = "I love {}".format("Python")
print(s)
s = "Yes, i am {1} years old, I love {0} and i am {1} years old".format("Python", 18)
print(s)
運算符
算數運算符
# +,-跟正常算術運算符一模一樣
a = 9+3-2
print(a)
# 乘號用星號(*)代替
a = 9 * 4
print(a)
# 除號用斜槓(/)代替
# 在Python2.x 和python3.x 中,除號(/)結果可能不一致,此處以3系列爲準
a = 9/4
print(a)
# % 取餘運算
# 兩個數字相除應該有商數有餘數
# % 只會得到餘數
a = 9 % 4
print(a)
# // 表示取商運算,也叫地板除
a = 9 // 4
print(a)
# ** 表示冪運算
a = 9 ** 4
print(a)
賦值運算符
# = , 賦值
a = 0
c = a = 4
# +=, 是縮寫,
a = 0
a += 7 # a = a+ 7 的縮寫
print(a)
邏輯運算符
and 邏輯與
or 邏輯或
not 邏輯非
a = True
b = False
c = True
# 以下式子等價於 d = 1 * 0 + 1
d = a and b or c
print(d)
d = a or b and a
print(d)
成員運算符號-用來檢測某一個變量是否是另一個變量的成員
in
not in
l = [1,2,3,4,5]
a = 7
b = a in l
print(b)
a = 4
print(a in l)
print(a not in l)
輸出結果爲:
False
True
False
身份運算
is: 用來檢測兩個變量是否是同一個變量
語法就是 var1 is var2
is not: 兩個變量不是同一個變量
a = 9
b = 9
print( a is b)
a = "I love Python"
b = "I love Python"
print( a is b)
輸出結果爲:
True
False
三大結構
順序
分支
循環
分支
分支的基本語法
if 條件表達式:
語句1
語句2
語句3
#案例
score = 59
if score < 60:
print("恭喜你")
print("高數不及格")
print("finished")
輸出結果爲:
恭喜你
高數不及格
finished
雙向分支
if…else…語句 `
if 條件表達式:
語句1
語句2
...
else:
語句1
語句2
.....
多路分支
if 條件表達式:
語句1
....
elif 條件表達式:
語句1
...
elif 條件表達式:
語句1
...
.....
else:
語句1
....
循環語句
分類:
for循環
while循環
for循環
for 變量 in 序列:
語句1
語句2
...
# 打印學生列表姓名
for name in ['zhangsan', 'lisi', 'wangwu','jingjing']:
print(name)
輸出結果爲:
zhangsan
lisi
wangwu
jingjing
range函數
# range練習
# 打印從1-10的數字
# 注意,一般在python中,如果由表示數字範圍的兩個數,一般是包含左邊數字不包含右邊數字
# range函數在python2 和 python3中有嚴重區別(2生成列表,3生成迭代器)
for i in range(1,11):
print(i)
輸出結果:
1
2
3
4
5
6
7
8
9
10
for-else語句
當for循環結束的時候,會執行else語句
else語句是可選語句
for name in ['zhangsan', 'lisi', 'wangwu','jingjing']:
print(name)
if name == "jingjing":
print("{0}同學高數不及格".format(name))
else:
print("{0}同學高數ok".format(name))
else:
print("沒有其他同學的高數成績了")
輸出結果爲:
zhangsan
zhangsan同學高數ok
lisi
lisi同學高數ok
wangwu
wangwu同學高數ok
jingjing
jingjing同學高數不及格
沒有其他同學的高數成績了
函數
定義
# 定義一個函數
# 只是定義的話不會執行
# 1. def關鍵字,後跟一個空格
# 2. 函數名,自己定義,起名需要遵循便令命名規則,約定俗成,大駝峯命名只給類用
# 3. 後面括號和冒號不能省,括號內可以由參數
# 4. 函數內所有代碼縮進
def func():
print("我是一個無情的函數")
print("我結束了")
輸出結果爲:
我結束了
# 函數的調用
# 直接函數名後面跟括號
func()
輸出結果爲:
我是一個無情的函數
函數的參數與返回值
參數: 負責給函數傳遞一些必要的數據或者信息
形參(形式參數): 在函數定義的時候用到的參數沒有具體值,只是一個佔位的符號,成爲形參
實參(實際參數): 在調用函數的時候輸入的值
返回值: 函數的執行結果使用return關鍵字
如果沒有return,默認返回一個None函數
一旦執行return語句,則無條件返回,即結束函數的執行
def hello(person):
print("{0},你好".format(person))
print("{0},再見".format(person))
p = 1
hello(p)
1,你好
1,再見
# return語句的基本使用
# 函數打完招呼後返回一句話
def hello(person):
print("{0},你好".format(person))
print("{0},再見".format(person))
return "我已經跟{0}打過招呼了".format(person)
p = "小明"
rst = hello(p)
print(rst)
小明,你好
小明,再見
我已經跟小明打過招呼了
參數詳解
參數分類
普通參數
默認參數
關鍵字參數
收集參數
def stu(name, age, addr):
print("I am a student")
print("我叫 {0}, 我今年 {1}歲了, 我住{2}".format(name, age, addr))
n = "jingjing"
a = 18
addr = "我家"
# 普通參數,只按照位置傳遞,容易出錯
stu(a, n, addr)
def stu_key(name="No name", age=0, addr="No addr"):
print("I am a student")
print("我叫 {0}, 我今年 {1}歲了, 我住{2}".format(name, age, addr))
n = "jingjing"
a = 18
addr = "我家"
# 關鍵字參數,不容易出錯
stu_key(age=a, name=n, addr=addr)
輸出結果爲:
I am a student
我叫 18, 我今年 jingjing歲了, 我住我家
I am a student
我叫 jingjing, 我今年 18歲了, 我住我家
收集參數
把沒有位置,不能和定義時的參數位置相對應的參數,放入一個特定的數據結構中
def func(*args):
func_body
按照list使用方式訪問args得到傳入的參數
調用:
func(p1, p2, p3, .....)
參數名args前需要由星號收集
參數可以和其他參數共存
# 收集參數代碼
# 函數模擬一個學生進行自我介紹,但具體內容不清楚
# args把他看做一個list
def stu( *args):
print("Hello 大家好,我自我介紹以下,簡答說兩句:")
# type函數作用是檢測變量的類型
print(type(args))
for item in args:
print(item)
stu("小明", 18, "北京", "小芳", "單身")
stu("小明")
輸出結果爲:
Hello 大家好,我自我介紹以下,簡答說兩句:
<class ‘tuple’>
小明
18
北京
小芳
單身
Hello 大家好,我自我介紹以下,簡答說兩句:
<class ‘tuple’>
小明
收集參數之關鍵字收集參數
把關鍵字參數按字典格式存入收集參數
def func( **kwargs):
func_body
# 調用:
func(p1=v1, p2=v2, p3=v3........)
# 收集參數案例
# 自我介紹
# 調用的時候需要使用關鍵字參數調用
def stu( **kwargs):
# 在函數體內對於kwargs的使用不用帶星號
print("Hello 大家好,我先自我介紹一下:")
print(type(kwargs))
# 對於字典的訪問,python2 和python3有區別
for k,v in kwargs.items():
print(k, "---", v)
stu(name="小明", age=19, addr="北京", lover="小芳", work="程序員")
print("@" * 50)
stu(name="小明")
Hello 大家好,我先自我介紹一下:
<class ‘dict’>
name — 小明
age — 19
addr — 北京
lover — 小芳
work — 程序員
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Hello 大家好,我先自我介紹一下:
<class ‘dict’>
name — 小明
收集參數的解包問題
把參數放入list或者字典中,直接把list/dict中的值放入收集參數中
# 收集參數的解包問題
def stu(*args):
print("哈哈哈哈哈")
# n 用來表示循環次數
# 主要用來調試
n = 0
for i in args:
print(type(i))
print(n)
n += 1
print(i)
li = ["小明","小芳"]
stu(*li)
輸出結果爲:
哈哈哈哈哈
<class ‘str’>
0
小明
<class ‘str’>
1
小芳
同理,dict類型收集參數一樣可以解包,但是¶對dict類型進行解包需要用兩個星號進行解包
局部變量爲全局變量
使用global
def fun():
global b1
b1 = 100
print(b1)
print("I am in fun")
# a2的作用範圍是fun
b2 = 99
print(b2)
#print(b2)
fun()
# print(b1)如果在函數調用上面,則不好使,報錯,爲什麼???
print(b1)
輸出結果爲:
100
I am in fun
99
100
Python內置數據結構
列表
# 1, 創建空列表
l1 = []
print(l1)
# 2. 創建帶值的列表
l2 = [100]
print(l2)
# 3. 使用list()
l3 = list()
print(type(l3))
print(l3)
列表常用操作
訪問
# 下標訪問列表
l = [3,2,1,4,6,3,2]
print(l[3])
輸出結果爲:
4
切片
# 切片操作
# 注意截取的範圍,包含左邊的下標值,不包含右邊的下標值
print(l[1:4])
# 下標值可以爲空,如果不寫,左邊下標值默認爲0, 右邊下標值爲最大數加一,即表示截取到最後一個數據
print(l[:])
print(l[:4])
print(l[2:])
輸出結果爲:
[2, 1, 4]
[3, 2, 1, 4, 6, 3, 2]
[3, 2, 1, 4]
[1, 4, 6, 3, 2]
print(l)
# 切片可以控制增長幅度,默認增長幅度爲1
print(l[1:6:1])
# 打印從下標1開始的數字,每次隔一個
print(l[1:6:2])
輸出結果爲:
[3, 2, 1, 4, 6, 3, 2]
[2, 1, 4, 6, 3]
[2, 4, 3]
# 切片之負數下標
print(l)
# 下面顯示的是爲空,因爲默認分片總是從左向右截取
# 即正常情況,分片左邊的值一定小於右邊的值
print(l[-2:-4])
print(l[-4:-2])
# 如果分片一定左邊值比右邊大,則步長參數需要使用負數
# 此案例爲一個list直接正反顛倒提供了一種思路
print(l[-2:-4:-1])
輸出結果爲:
[3, 2, 1, 4, 6, 3, 2]
[]
[4, 6]
[3, 6]
刪除列表中的值
# del 刪除
a = [1,2,3,4,5,6]
del a[2]
print(a)
輸出結果爲:
[1, 2, 4, 5, 6]
其他操作
# 使用加號鏈接兩個列表
a = [1,2,3,4,5]
b = [5,6,7,8,9]
d = ['a', 'b', 'c']
c = a + b + d
print(c)
輸出結果爲:
[1, 2, 3, 4, 5, 5, 6, 7, 8, 9, ‘a’, ‘b’, ‘c’]
# 使用乘號操作列表
# 列表直接跟一個整數相乘
# 相當於把n個列表接在一起
a = [1,2,3,4,5]
b = a *3
print(b)
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]