1.全局變量和局部變量python
money = 10 # 全局變量
def func(): num = 'num' # 局部變量
global money money += 500
print(num + money) ''' global money # 在局部變量中想修改全局變量,須要用global聲明你要修改的是全局變量 全局列表、字典、集合在修改時,不用聲明全局變量,能夠直接修改 全局int、str、tuple(元組)在修改時,須要先聲明爲全局變量 便可變類型的全局變量在修改時,不用聲明全局變量,能夠直接修改;不可變類型,須要聲明(元組元素不能修改) '''
2.函數定義mysql
def test1(): # 定義一個函數
pass # 表示沒有函數體,直接過
def test2(a, b): # 定義一個有參的函數
return a # 函數返回值
3.函數參數sql
# 一、必填參數(位置參數)
def say_word(word): print(word)
# 二、默認值參數:能夠不傳參數,不傳參數的時候使用默認值,傳了參數時使用所傳參數 # (使用默認值參數能夠實現一個函數實現多個功能,例如一個函數實現讀和寫兩個功能)
def say_hello(word='hello'): # 默認值參數
print(word)
# 三、參數組(可變參數):不限制參數的類型和數量
def send_mail(*args): # 此時args是元組類型,名稱可改(例如:*name),習慣上使用args
for name in args: print('給%s發郵件' % name) return args send_mail() send_mail('zhangsan') send_mail('zhangsan', 'lisi', 'wangwu')
# 四、關鍵字傳參:形參較多時,可使用關鍵字傳參,參數能夠不用按照順序傳參
''' 調用參數時,能夠所有使用位置參數,位置一一對應,必須按照位置傳參 也能夠所有使用關鍵字傳參,指定關鍵字,就不須要按照順序傳參 也能夠位置參數和關鍵字參數一塊兒使用,但要先寫位置參數在用關鍵字參數,關鍵字參數後面不能再使用位置參數 '''
def szz(name, age, sex, addr, phone): print('111') szz(sex='man', name='zhangsan', addr='beijing', age=18, phone='13565243526') # 使用關鍵字參數
szz('zhangsan', 18, sex='man', addr='beijing', phone='13565243526') # 位置參數和關鍵字參數混合使用
# 以下,是否傳參不限制,參數類型和數量不限制,可是隻能使用關鍵字參數,不能使用位置參數
def name(**kwargs): # 關鍵字傳參,此時kwargs是字典類型,名稱可改(例如:**name),習慣上使用kwargs
print(kwargs) name() name(name='zhangsan', age='18', phone='1234') name(name='zhangsan', age='18', phone='1234', addr='beijing')
# 指定參數類型
def add_user(username: str, passwd: int): # 指定傳入參數類型,傳入參數時,也能夠不傳入指定類型
username.strip() print(passwd)
# 參數練習1:
def student(name, age=None, *args, **kwargs): print(name) # 位置參數
print(age) # 默認參數
print(args) # 參數組
print(kwargs) # 關鍵字參數
student('zhangsan', 18, 'lisi', 'wangwu', sex='man', phone='123')
# 參數練習2:
def db_mysql(host, port, user, passwd, db): print(host) print(port) print(user) print(passwd) print(db) db_info1 = ('127.0.0.1', 3306, 'root', '1234567', 'szz') db_info2 = { 'host': '127.0.0.1', 'port': 3306, 'user': 'root', 'passwd': '1234567', 'db': 'szz', } db_mysql(*db_info1) db_mysql(**db_info2) # * 表明拆開db_info1(解包),將db_info1中的元素與參數意義對應,但db_info1中的元素不能多於參數數量,且位置需與參數位置對應 # db_info1只要是有下標的數據類型便可,例如列表,元組,字符串等 # ** 表明拆開db_info2字典(解包),將db_info2中的元素與參數意義對應,但db_info2中的元素不能多於參數數量,且key的位置需與參數位置對應
4.函數返回值數組
# return的做用:1.返回函數值 2.結束函數 # 返回多個值,用一個變量接收,那麼會將多個返回值放入一個元組中進行返回
def get_file(age, name, addr): age += 5 name = 'szz' + name addr = 'beijing' + addr return age, name, addr res = get_file(19, 'xiaohei', 'chaoyang') # 多個返回值使用一個變量接收
age, name, addr = get_file(19, 'xiaohei', 'chaoyang') # 多個返回值使用多個變量接收
print(res) # 打印出的會是一個元組
5.遞歸函數
# 遞歸:函數本身調用本身,最大次數調用999次
def say(): num = input('請輸入一個數字:').strip() if int(num) % 2 != 0: print('請輸入一個偶數') say() say()
# 練習:
li = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] for i in li: if i % 2 != 0: li.remove(i) print(li) # 結果爲:[1, 2, 4, 6, 8] # 緣由是,循環刪除列表元素時,再次循環,列表元素會更新
# 解決方法以下:
l1 = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] l2 = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 不能寫成l2=l1,由於變量存儲時是存的內存地址,l2=l1時,l1和l2內存地址相同
# 寫法2:l2 = l1[:]
for i in l2: if i % 2 != 0: l1.remove(i) print(l1) print(id(l1)) print(id(l2)) # 查看內存地址
6.深拷貝和淺拷貝spa
# 深拷貝
l1 = [1, 1, 2, 3, 4, 5, 6, 7, 8, 9] l2 = l1[:] # 開闢了新的內存空間,兩個變量之間互不影響 # 淺拷貝
l2 = l1 # 未開闢新的內存空間,兩個變量之間會被互相影響 # 深拷貝和淺拷貝的區別,淺拷貝不會開闢新的內存空間,深拷貝會開闢新的內存空間
import copy # 導入copy模塊
d = {'name': 'zhangsan', 'age': [12, 1, 14]} d1 = d # 淺拷貝
d2 = copy.deepcopy(d) # 深拷貝函數
d3 = copy.copy(d) # 淺拷貝,可是d和d3的內存地址不一樣,但若d中存在多層(例如列表元素),則不會拷貝深層的內容
7.內置函數code
input() # 輸入
tuple() # 元組
bool # 布爾
dict() # 字典
list() # 列表
len() # 求長度
sum([1, 2, 3]) # 求和
max([1, 2, 3]) # 求最大值
min([1, 2, 3]) # 求最小值
round(1.98234, 2) # 取幾位小數(將1.98234保留兩位小數)
divmod(10, 5) # 取商和餘數
globals() # 用於全局時,取當前文件中的全部變量;用於局部時,依然取當前文件的全部變量
locals() # 用於全局時,取當前文件中的全部變量;用於局部時,取局部的全部變量
chr(55) # 將ascii轉成對應的字符
ord('A') # 將字符轉成對應的ascii
dir(d) # 查看d中有哪些方法
# 排序
sorted(l) # 對l進行排序,l能夠是list、字符串等,排序後會返回一個list,升序
sorted(l, reverse=True) # 降序排序
# 執行python代碼
code = ''' print('1') '''
exec(code) # 運行python代碼
eval(code) # 執行簡單的python代碼
# 枚舉 enumerate
l = [1, 2, 3, 4, 5] for id, i in enumerate(l, 1): # 將l列表中的元素從1開始,自動編號
print('%s=>%s' % (id, i))
# 壓縮
zip() # 壓縮,將多個列表合在一塊兒;不限制於列表,對字典使用時,只合並兩個字典的key值;若一列表元素多餘另外一元素,則以少的爲準
list1 = ['xiaoming', 'xiaobai', 'xiaohei', 'zhangsan'] list2 = [1, 2, 3, 4, 5] l1 = {'name': 1, 'age': 2} l2 = {'add': 3, 'phone': 4} res = list(zip(l1, l2)) res1 = list(zip(list1, list2)) print(res) print(res1) # 循環調用
import os list(map(os.mkdir, ['1', '2', '3'])) # 循環調用函數,獲取函數返回結果;表示循環列表中的值調用os.mkdir函數,注意函數不加括號,後面只要是能夠循環的便可 # map(os.mkdir,['1','2','3'])直接這樣寫不會調用即不會真的執行,需強轉
score = [89, 43, 60, 52, 45, 37, 66, 100, 21, 24] def is_jg(s): if s > 59: return True result = list(filter(is_jg, score)) # 循環調用函數,將返回True的保存,不然過濾