學習Python的日子 Python(6)

我姓西發表於2018-05-21
Python
函式巢狀
巢狀: A函式,  B函式中使用了A函式
def A():
print("我是A函式")


def B():
A() # 在B函式中呼叫了A函式
print("我是B函式")


# 呼叫B函式
B()
全域性和區域性變數
如果在函式中使用了全域性變數而且又試圖更改全域性變數,於是報錯   解決方式: 在使用全域性變數之前宣告一下: global 全域性變數
區域性變數: 宣告在函式中就是區域性變數  ,引數也是區域性變數
區域性變數,函式執行完畢之後就會被回收
全域性變數:不能隨便的改全域性變數
區域性變數: 函式中宣告的變數和引數
可變型別: 函式中允許修改裡面的內容的
不可變型別: 如果函式中試圖修改,則需要新增global 變數名  
如果有同名的變數: 區域性與全域性,呼叫的就是區域性變數  ,但是如果在函式中有顯示的宣告,global 變數,後面使用的就是全域性變數
遞迴函式
1. 必須要有出口
2. 要逐漸的向出口靠近
如果一個函式在內部不呼叫其它的函式,而是自己本身的話,這個函式就是遞迴函式。
'''
求:1-10的累加和
'''
n=10
def func(n):
# 找出口
if n==1:
return 1
else:
return func(n-1)*n


result=func(n)
print(result)
匿名函式
lambda函式的語法只包含一個語句,如下:
lambda [arg1 [,arg2,.....argn]]:expression
result=lambda x,y,z:x+y+z
匿名函式的優點:
使用Python寫一些指令碼時,使用lambda可以省去定義函式的過程,讓程式碼更加精簡。
對於一些抽象的,不會被別的地方再重複使用的函式,有時候函式起個名字也是個難題,使用lambda不需要考慮命名的問題
使用lambda在某些時候然後程式碼更容易理解
應用
在內建函式 max() 求最大值,min()求最小值, map() 對映, reduce 合併, filter() 過濾 中會用到!
1.匿名函式作為引數
def func(x,y,get_sum):
print(x,y)
print(get_sum)
print(get_sum(x,y))


# 呼叫func
func(8,9,lambda x,y:x+y)
2.應用:  跟內建函式結合使用
list1=[1,6,8,9,4]
print(max(list1))


dict1={"a":1,"A":11,"b":2,"B":10}  # 


dict1_list=[{"a":9,"A":11,"b":2,"B":10},{"a":5,"A":11,"b":2,"B":10},{"a":10,"A":11,"b":2,"B":10}]


print(max(dict1))


# print(max(lambda x : x["a"],dict1_list))
print(max(dict1_list,key=lambda x : x["a"]))  # max(9,5,10)  --->10  ---->存在10的字典


# print(isinstance(dict1_list,Iterable))


stus=[
  {"name":"tom1","age":20},
  {"name":"tom2","age":28},
  {"name":"tom3","age":19},
  {"name":"tom4","age":21}
]


student=max(stus,key=lambda x:x["age"])
print(student)


student=min(stus,key=lambda x: x["age"])
print(student)
reduce()
用來實現加減乘除運算的函式
reduce(func,可迭代,初始化)
python3.4  專門放到functools模組中    func必須是兩個引數
print()  len()  max()  min()  list() ...   ---->builtins模組  預設載入的模組
from 模組名 import 子功能
filter() 
過濾    格式: filter(function or None,迭代的)
給函式新增文件說明
print(help(函式名))
檢視Python課件第六章
a+=a   !=    a=a+a
# a=[100]


# def func(a1):
# "如果操作列表的話,地址不會發生改變"
# a1+=a1  # 如果操作列表的話,地址不會發生改變


# print(id(a1),a1)


# func(a)


# print(id(a),a)


# print(help(func))


# print("-------------------")


# def func1(a2):  # a2=a
# # a2區域性變數
# a2=a2+a2  # [100]+[100] ===>[100,100] 但是地址是新的
#     # a2=新的地址
# print(id(a2),a2)


# func1(a)
# print(id(a),a)




檔案操作
持久化操作
就是把一些資料存放起來,可以讓程式下一次執行的時候直接使用,載入到記憶體中,而不必重新制作一份,省時省力。
檔案的種類:
檔案的種類:
二進位制檔案: 圖片  音樂  電影
開啟一個已經存在的檔案還可以新建一個檔案:  open()
open(檔名,訪問方式)  
f=open("files/test.txt","w+") # FileNotFoundError: [Errno 2] No such file or directory: '練習1.txt'


print(type(f))


f.write("哈哈哈哈!通車了!")


# 關閉
f.close()


print("寫入完畢!")


print("====開始讀取=====")
f=open("files/test.txt","r")
print(f.read())
f.close()
總結
匿名函式主要是作為引數使用.
內建函式:
max(可迭代的,key=func)
min(可迭代的,key=func)
map(func,可迭代的)
reduce(func,可迭代的)  --->python3.4 要匯入  from functools import reduce
filter(func,可迭代的)  func 返回值必須是True ,False


列表中:
sort(key=func,reverse=True/False)


'''




'''
函式: 1. 自定義函式  


def 函式(a,b=10):
函式體
    return a,b


lambda x,y:x+y


2.內建函式:


print(dir(__builtins__))

相關文章