Python基礎(chǔ)語(yǔ)法-1

  • is
    is 判斷兩個(gè)標(biāo)識(shí)符是否引用同一個(gè)對(duì)象,x is y 類似 id(x)==id(y)
    is not 判斷兩個(gè)標(biāo)識(shí)符是否引用不同對(duì)象,x is not y 類似 id(x)!=id(y)

is 和 == 區(qū)別:
is 判斷兩個(gè)標(biāo)識(shí)符是否引用同一個(gè)對(duì)象
== 判斷引用變量的值是否相等
針對(duì)None進(jìn)行比較時(shí),建議使用is

  • for & while
names = ['Naruto', 'Luffy', 'Conan', 'Sasuke']
for name in names:
    print(name)
else:
    print("沒(méi)有通過(guò)break退出循環(huán),循環(huán)結(jié)束后,會(huì)執(zhí)行的代碼")

index = 0
while index < len(names):
    print(names[index])
    index += 1
  • 函數(shù)
  1. 多個(gè)返回值
# 多個(gè)返回值,其實(shí)就是一個(gè)tuple
def move(x, y, step, angle=0):
    # 一個(gè)點(diǎn)移動(dòng)到另一個(gè)點(diǎn),給出坐標(biāo)、位移和角度,就可以計(jì)算出新的新的坐標(biāo)
    # angle=0 表示默認(rèn)參數(shù)
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny


# 可以使用多個(gè)變量一次接收所有返回值
x, y = move(100, 100, 60, math.pi / 6)
print(x, y)    # 151.96152422706632 70.0
# 可以用一個(gè)元組接收多個(gè)返回值
z = move(100, 100, 60, math.pi / 6)
print(z)       # (151.96152422706632, 70.0)

交換兩個(gè)變量的值:

def change(a, b):
    # 利用元組
    a, b = b, a
    return a, b
  1. 缺省參數(shù)
# 缺省參數(shù)必須指向不變對(duì)象,缺省參數(shù)放在最后
def enroll(name, gender, age=6, city='Beijing'):
    print('name:', name, ' gender:', gender, ' age:', age, ' city:', city)


enroll('xiaolan', 'A', 7, 'shenzhen')
enroll('xiaobai', 'F')
enroll('xiaohei', 'B', 5)
enroll('xiaofen', 'C', city='shanghai') # 不是按順序輸入,需要寫(xiě)上參數(shù)名
  1. 多值參數(shù)(知道)
'''
參數(shù)名前增加一個(gè)* 可以接收元組,命名規(guī)則:*args
參數(shù)名前增加兩個(gè)* 可以接收字典,命名規(guī)則:**kwargs
'''
def calc(*args):
    sum = 0
    for n in args:
        sum = sum + n * n
    return sum


print(calc(1, 2, 3))
# *nums表示把nums這個(gè)list的所有元素作為可變參數(shù)傳進(jìn)去
nums = [1, 2, 3]
print(calc(*nums))

print('=' * 50)


def person(name, age, **kwargs):
    print('name:', name, 'age:', age, 'other:', kwargs)


person('Michael', 30)   # name: Michael age: 30 other: {}
person('Bob', 35, city='Beijing')   # name: Bob age: 35 other: {'city': 'Beijing'}
person('Adam', 45, gender='M', job='Engineer')  # name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra) # name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

print('=' * 50)


# 如果要限制關(guān)鍵字參數(shù)的名字,就可以用命名關(guān)鍵字參數(shù),例如,只接收city和job作為關(guān)鍵字參數(shù)
def person3(name, age, *, city, job):
    print(name, age, city, job)


# 命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名,這和位置參數(shù)不同。如果沒(méi)有傳入?yún)?shù)名,調(diào)用將報(bào)錯(cuò):
person3('Jack', 24, city='Beijing', job='Engineer')
# 參數(shù)定義的順序必須是:必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。
  1. 遞歸函數(shù)
# n! = 1 x 2 x 3 x ... x n
def fact(n):
    if n == 1:
        return 1
    return n * fact(n - 1)

print(fact(5))

尾遞歸
尾遞歸是指,在函數(shù)返回的時(shí)候,調(diào)用自身本身,并且,return語(yǔ)句不能包含表達(dá)式。
編譯器或者解釋器就可以把尾遞歸做優(yōu)化,使遞歸本身無(wú)論調(diào)用多少次,都只占用一個(gè)棧幀,不會(huì)出現(xiàn)棧溢出的情況。

def fact_iter(num, result=1):
    if num == 1:
        return result
    return fact_iter(num - 1, num * result)

fact_iter(5)
  1. 私有函數(shù)
# _xxx和__xxx這樣的函數(shù)或變量就是非公開(kāi)的(private),不應(yīng)該被直接引用
def __private__(name):
    return 'Hello, %s' % name

print(__private__("xiaoli"))
# 查看對(duì)象內(nèi)的所有屬性和方法
print(list.__dir__())

注:
在函數(shù)內(nèi)部針對(duì)參數(shù)使用賦值語(yǔ)句,會(huì)在函數(shù)內(nèi)部修改局部變量的引用,不會(huì)影響外部變量的引用;
如果傳遞的參數(shù)是可變類型,在函數(shù)內(nèi)部,使用方法修改變量?jī)?nèi)容,同樣會(huì)影響外部變量。

L = ['Hello', 'World', 'IBM', 'Apple']
list = [s.lower() for s in L]
print(list)     # ['hello', 'world', 'ibm', 'apple']
  • list
# list里面的元素的數(shù)據(jù)類型也可以不同
list = ["hahah", 1, ['a','d'], True]

name_list = ["鳴人", "佐助", "小櫻"]
print(name_list)
for name in name_list:
    print(name)

n = 0
while n < len(name_list):
    print(name_list[n])
    n += 1

# list長(zhǎng)度
print("列表中包含%d個(gè)元素" % len(name_list))  # 3
# list中某個(gè)元素有幾個(gè)
count = name_list.count("鳴人")
# 往list中追加元素到末尾
name_list.append("卡卡西")
# 元素插入到指定的位置
name_list.insert(1, "佐井")
# 將一個(gè)列表中元素增加到另一個(gè)列表中
list1 = ["豬八戒", "孫悟空"]
name_list.extend(list1)
# 把某個(gè)元素替換成別的元素
name_list[0] = "漩渦鳴人"
# 獲取元素下標(biāo),如果元素不在列表中,會(huì)報(bào)錯(cuò)
print(name_list.index("小櫻"))
# 刪除list末尾的元素
name_list.pop()
# 刪除指定位置的元素
name_list.pop(1)
# 刪除指定元素,數(shù)據(jù)不存在會(huì)報(bào)錯(cuò)
name_list.remove("豬八戒")
print(name_list)
# 清空列表中的元素
name_list.clear()
# 擴(kuò)展:刪除列表中指定下標(biāo)元素 可以用del
list2 = ["aaa", "bbb", "ccc"]
del list2[0]

# del也可以將變量從內(nèi)存中刪除
# a = "aaa"
# del a

# 排序
list3 = ["zhangsan", "lisi", "wangwu"]
list3.sort()                # 升序排列
list3.sort(reverse=True)    # 降序排列

# 逆序(反轉(zhuǎn))
list3.reverse()

# 列表相加 +=相當(dāng)于調(diào)用extend()方法
list1 = [1, 2, 3]
list2 = [4, 5]
list3 = list1 + list2
print(list3)    # [1, 2, 3, 4, 5]
print(list3 * 2)
  • tuple
my_info_tuple = ("路飛", 17, "船長(zhǎng)")
print(my_info_tuple[1])
print(my_info_tuple.index("船長(zhǎng)"))
# 某個(gè)元素在tuple中出現(xiàn)的次數(shù)
count = my_info_tuple.count("路飛"))
len = len(my_info_tuple))
for name in my_info_tuple:
    print(name)

# 元組和列表的轉(zhuǎn)換
list1 = ["豬八戒", "孫悟空", "沙和尚"]
tuple1 = ("柯南", "路飛", "鳴人")
# 元組轉(zhuǎn)列表
list2 = list(tuple1)
# 列表轉(zhuǎn)元組
tuple2 = tuple(list1)
# 只有一個(gè)元素的元組
tuple = (1,)
# 元組相加
tuple1 = (1, 2, 3)
tuple2 = (4, 5)
tuple3 = tuple1 + tuple2
  • dictionary
student_dic = {"name": "小明", "age": 10, "score": 67.2}
# 取值 key不存在返回None
print(student_dic.get("nnn"))
# key不存在返回指定value
print(student_dic.get("nnn", -1))
# student_dic["key"],key不存在會(huì)報(bào)錯(cuò),in判斷的是key
if "nnn" in student_dic:
    print(student_dic["nnn"])
else:
    print("key不存在")

# 刪除元素
student_dic.pop("age")
# 增加、修改元素
student_dic["height"] = 155
# 統(tǒng)計(jì)鍵值對(duì)數(shù)量
len = len(student_dic))
# 合并字典, 如果被合并的字典中包含已經(jīng)存在的鍵值對(duì),會(huì)覆蓋原有鍵值對(duì)
dic1 = {"key1": "value1"}
dic2 = {"key2": "value2", "key1": "value3"}
dic1.update(dic2)
# 清空字典
dic1.clear()

# 循環(huán)遍歷
for key in student_dic.keys():
    print("key =", key)
for value in student_dic.values():
    print("value =", value)
for key, value in student_dic.items():
    print("key =", key, ", value =", value)
  • String
word = '字符串'
sentence = "這是一個(gè)句子。"
paragraph = """這是一個(gè)段落,
可以由多行組成"""

str = 'Runoob'

print(str[0:-1])    # 下標(biāo)為0的字符到倒數(shù)第二個(gè)字符
print(str[0])       # 下標(biāo)為0的字符
print(str[2:4])     # 下標(biāo)為2的字符到下標(biāo)為4之前的字符
print(str[2:])      # 下標(biāo)2開(kāi)始的后的所有字符
print(str * 2)      # 輸出字符串兩次
print(str + "TEST") # 連接字符串
print(str[-1:])     # -1表示最后一個(gè)字符

# 使用反斜杠()轉(zhuǎn)義特殊字符,如果你不想讓反斜杠發(fā)生轉(zhuǎn)義,可以在字符串前面添加一個(gè) r,表示原始字符串
print('Ru\noob')
print(r'Ru\noob')

string = "asdfogoakmold"
# 字符串string長(zhǎng)度
len = len(string))
# string中字符串"o"的個(gè)數(shù)
count = string.count("o")

# 字符串string中是否包含字符串“a”,返回string中第一個(gè)“a”所在下標(biāo),不存在返回-1
index = string.find("a")
index = string.rfind("a")    # 從右往左查找
# 返回字符串string中字符串“a“所在下標(biāo),不存在報(bào)異常
index = string.index("a")
index = string.rindex("a")  # 從右往左查找

# 將string中的"old"用"new"替換,原字符串不會(huì)改變,返回新的字符串
string.replace("old", "new")
string.replace("old", "new", 1)  # 只替換第一個(gè)"old"字符串

# 判斷字符串string是否以"a"開(kāi)頭
string.startswith("a")
# 判斷字符串string是否以"s"結(jié)尾
string.endswith("s")

# 將字符串string轉(zhuǎn)為小寫(xiě)
string.lower()
# 將字符串string轉(zhuǎn)為大寫(xiě)
string.upper()

# 去掉字符串左邊空格
string.lstrip()
# 去掉字符串右邊空格
string.rstrip()
# 去掉字符串兩邊空格
string.strip()

width = 20
# 返回原字符串左對(duì)齊,并且使用空格填充至長(zhǎng)度的width的新字符串
string.ljust(width)
# 返回原字符串右對(duì)齊,并且使用空格填充至長(zhǎng)度的width的新字符串
string.rjust(width)
# 返回原字符串居中,并且使用空格填充至長(zhǎng)度的width的新字符串
string.center(width)

# 將字符串按照某個(gè)字符串進(jìn)行分割,split()方法不傳任何參數(shù)時(shí),則按照任意空白字符分割
string = "er ewe dsdsf fdsfs"
string.split(" ")    # ['er', 'ewe', 'dsdsf', 'fdsfs']
# 將字符串string以"str"分割為三部分,str前、str、str后,以第一個(gè)"str"為準(zhǔn)
string.partition("str")
string.rpartition("str")  # 從右邊起
# 字符串按 “\n”切割
string.splitlines()

# 字符串中是否都是數(shù)字,都不能判斷小數(shù)
string.isdecimal()  # 全角數(shù)字,盡量使用這個(gè)方法
string.isdigit()    # 全角數(shù)字、"(1)"、\u00b2(unicode字符串)
string.isnumeric()  # 全角數(shù)字、漢字?jǐn)?shù)字

# 字符串中是否都是字母
string.isalpha()
# 字符串中是否只有數(shù)字和字母
string.isalnum()
# 字符串中只包含空格
string.isspace()

# string每一個(gè)字符后插入字符串sss,構(gòu)造新的字符串
sss = "xxx"
sss.join(string)  # axxxbxxxcxxx1xxx2xxx3

# 字符串的切片,切片同樣適用于list和tuple
# str[索引:索引:步長(zhǎng)]
str = "0123456789"
str1 = str[0:5]    # 01234
# 從下標(biāo)為0的字符開(kāi)始,到下標(biāo)為8的字符之前(左閉右開(kāi)),每隔三個(gè)字符取一個(gè)
str2 = str[0:8:3]   # 036
# -1表示從右向左切
print(str[-1::-1])   # 9876543210
print(str[::-1])   # 9876543210
  • 變量
    在開(kāi)發(fā)時(shí),應(yīng)該把模塊中的全局變量定義在所有函數(shù)的上方
    全局變量名應(yīng)加 g_ 或 gl_ 前綴
gl_name = "唐僧"
# 函數(shù)內(nèi)部修改全局變量
def test():
    # global關(guān)鍵字表示后面的變量是一個(gè)全局變量,再使用賦值語(yǔ)句時(shí),就不會(huì)創(chuàng)建局部變量
    global gl_name
    gl_name = "悟空"
    print(gl_name)
  • 三元運(yùn)算符
# a b c最大值
max = a if a > b else b
max = max if max > c else c
  • range()
    range() 生成一個(gè)自然數(shù)序列
    通過(guò)range()可以創(chuàng)建一個(gè)執(zhí)行指定次數(shù)的for循環(huán)
# 生成[0,1,2,3,4]
range(0,5)
# 執(zhí)行10次
for i in range(10):
    print(i)
最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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