1.Python函数语法
def 函数名(参数列表):
函数体
①、return表示返回值,不写return的函数默认返回None
import os
import sys
import time
# 输出日志
def zxLog(*message):
allMessage = ''
for item in message:
allMessage += '\n'
if isinstance(item,str):
allMessage += item
elif isinstance(item,list) or isinstance(item,dict) or isinstance(item,tuple):
allMessage += repr(item)
else:
try:
allMessage += str(item)
except NameError:
print('error!!!!')
# 文件路径
file_path = os.getcwd()
# 文件名:.Split('/')[:-1]
file_name = file_path[file_path.rindex('/')+1:]+'/'
# 系统时间
currentTime = time.strftime('%Y-%m-%d %H:%M:%S')
# 方法调用所在行数
line = sys._getframe().f_back.f_lineno
# 函数名
method_name = sys._getframe().f_back.f_code.co_name
print('\n'+file_name+currentTime+'<'+str(line)+'行>'+': '+allMessage)
# 不定长参数
zxLog('输出日志','输出日志2',22222,[1,2,3,4,5,6])
2.传递参数
①、不可变参数:String、Tuple、Number
②、可变参数:List、Dict,Sets
③、Python值存在不可变参数、可变参数传递;不存在值传递和引用传递
注:Python中参数分为必须参数、关键字、默认参数、不定长参数
# 传可变参数
def appendExtension(changeSeq):
ext = ['Hello Python Extension!']
if isinstance(changeSeq,list):
changeSeq.extend(ext)
elif isinstance(changeSeq,dict):
changeSeq.update({'ext':ext[0]})
person = {'name':'CaiBird','age':22}
ary = [1,2,3,4,5,6]
appendExtension(person)
appendExtension(ary)
zxLog(person)
zxLog(ary)
# 传不可变参数
def addIncrement(int):
int += 1
score = 59
addIncrement(score)
zxLog('分数及格?',score)
3.关键字参数
注:使用关键字参数允许函数调用时传入的顺序与声明不一致,因为Python解析器能够用参数名匹配参数值
def userInfo(name,age):
zxLog(name,age)
userInfo(age=22,name='CaiBird')
4.匿名函数
①、lambda主体是一个表达式,而不是一个代码块
注:Python使用lambda来创建匿名函数
diySum = lambda x , y : x + y
zxLog(diySum(10,20))
5.Python变量作用域
①、L (local) 局部作用域
②、E (Enclosing) 闭包函数外的函数中
③、G (Global) 全局作用域
④、B (Build-in) 內建作用域
注:以L -> E ->G -> B的规则查找
Python中只有模块(Module)、类(Class)以及函数(def、lambda)才会引入新的作用域
# 内部作用域改变外部作用域参数 :global修饰
# 修改嵌套作用域,即L修改E中的变量:nonlocal修饰
score = 59
def addIncrementTrue():
global score
score += 1
addIncrementTrue()
zxLog('分数及格?',score)