标签:关于 函数 orm none 开头 各类 交流 多少 访问
-普通参数-
def add_end(L=[]): L.append(‘END‘) # 这里已经添加了一个END return L # 正常调用 print (add_end([1,2,3])) # [1, 2, 3, ‘END‘] # 使用默认参数调用时,一开始也是对的,但是再次调用时,结果就不一样了 print (add_end()) # [‘END‘] print(add_end()) # [‘END‘, ‘END‘] print(add_end()) # [‘END‘, ‘END‘, ‘END‘]
结果如下:
[1, 2, 3, ‘END‘] [‘END‘] [‘END‘, ‘END‘] [‘END‘, ‘END‘, ‘END‘]
也就是说赋值给默认参数的对象应该为常量
如果需要修改正确,则需要判断传入时参数是否为空
def add_end2(L=None):
if L is None: # 这里的is是身份函数的一种,请翻回上一篇“变量”文章
L=[]
L.append(‘END‘)
return L
print(add_end2())
结果如下:
[‘END‘] # 也跟我们预期的结果一致
-关键字参数-
案例如下:
案例条件:打印基本信息
def stu(name,age,addr): print("我是{0},我今年{1},我住在{2}".format(name,age,addr)) #定义参数值 n = "zhansan" a = 18 addr = "广州" #普通参数传递,只按照位置传递,容易出错 stu(a,n,addr) #关键字传递,虽然麻烦,但是不容易出错 stu(age=a, name=n, addr=addr)
结果如下:
我是18,我今年zhansan,我住在广州
我是zhansan,我今年18,我住在广州
-收集参数-
案例如下
案例条件:函数模拟学生自我介绍,但是并不是每个学生都有相同的喜好,有的多,有的少
def stu(*args): print("hello,大家好,我先做下自我介绍:") print(type(args)) #查看args(收集参数)的类型 for item in args: #因为收集函数是一个tuple,所以使用循环将其全部打印 print(item)
调用收集参数
#有同学介绍内容多 stu("zhangsan",18,"广州","篮球","游戏") #有同学介绍内容不多 stu("lisi") # 即便只有一个值也使用tuple进行收集 #收集的内容也能为空 stu()
结果如下:
hello,大家好,我先做下自我介绍: <class ‘tuple‘> zhangsan 18 广州 篮球 游戏 hello,大家好,我先做下自我介绍: <class ‘tuple‘> lisi hello,大家好,我先做下自我介绍: <class ‘tuple‘>
使用关键字参数的格式进行调用收集参数
例如:调用时候 stu(name="wangwu",我们自己知道name是收集参数里面的那个值,但是系统不知道啊,系统直接当成是一个str类型的同一个变量而已,所以我们就要使用关键字收集参数
-关键字收集参数-
案例如下
案例条件:同上自我介绍
def stu(**kwargs): print("hello,大家好,我先做下自我介绍:") print(type(kwargs)) #查看收集关键字参数的类型 for k,v in kwargs.items(): #有两个变量进行循环原因是,不仅仅需要打印参数的值,连同关键字参数的参数名也要打印 print(k+"---"+v) #使用---将其分割开来,好看清楚 stu(name="zhangsan",age="18",addr="广州",lover="游戏",lovers="篮球") print("分割线"+"*"*20) stu(name="wangwu")
结果如下:
hello,大家好,我先做下自我介绍: <class ‘dict‘> name---zhangsan age---18 addr---广州 lover---游戏 lovers---篮球 分割线******************** hello,大家好,我先做下自我介绍: <class ‘dict‘> name---wangwu
关于各类参数调用的顺序问题
混合参数使用案例
def stu(name,age,hobby="没有",*args,**kwargs): #name,age=位置参数,hobby=默认参数,*args=收集参数,**kwargs=收集关键字参数 print("大家好,我再次介绍一下自己") print("我叫{0},今年{1}".format(name,age)) if hobby == "没有": print("对不起,我莫的爱好") else: print("我的爱好是{0}".format(hobby)) for i in args: print("我住在{0}".format(i)) for k,v in kwargs.items(): print("我还有爱好{0}".format(v))
开始调用
name = "zhansan" age = 18 #示范三种不同的调用方法 stu(name,age) stu(name,age,hobby="游戏") stu(name,age,"广州","萝岗区",hobby2="游戏",hobby3="篮球")
结果如下:
大家好,我再次介绍一下自己
我叫zhansan,今年18
对不起,我莫的爱好
大家好,我再次介绍一下自己
我叫zhansan,今年18
我的爱好是游戏
大家好,我再次介绍一下自己
我叫zhansan,今年18
我的爱好是广州
我住在萝岗区
我还有爱好游戏
我还有爱好篮球
-收集参数的解包问题-
解包案例如下
def stu(*args): print("哇哈哈哈") #这里声明一个对象来查看,到底遍历了多少次收集参数 n = 0 print(type(args)) for i in args: print(type(i))# 打印args列表里内容的类型 print(n) n += 1 print(i) l = ["zhangsan",19,23,"lisi"] #解包=将元祖或列表转化为字符串的过程呈现 stu(*l) l2 = ("zhangsan",19,23,"lisi") stu(*l2)
结果如下:
哇哈哈哈 <class ‘tuple‘> <class ‘str‘> 0 zhangsan <class ‘int‘> 1 19 <class ‘int‘> 2 23 <class ‘str‘> 3 lisi 哇哈哈哈 <class ‘tuple‘> <class ‘str‘> 0 zhangsan <class ‘int‘> 1 19 <class ‘int‘> 2 23 <class ‘str‘> 3 lisi
-收集关键字参数的解包问题-
解包案例如下
def stu(**kwargs): n = 0; print(type(kwargs)) for k,v in kwargs.items(): print(type(v)) print(n) n += 1 print(k+"---"+v) l1={‘name‘:‘zhangsan‘,‘age‘:"12",‘names‘:‘lisi‘,‘ages‘:‘23‘}# 定义字典 stu(**l1)
结果如下:
<class ‘dict‘> <class ‘str‘> 0 name---zhangsan <class ‘str‘> 1 age---12 <class ‘str‘> 2 names---lisi <class ‘str‘> 3 ages---23
-返回值-
返回值案例:有无返回值赋值的区别
def func_1(): print("有返回值") return 1 def func_2(): print("无返回值") f1 = func_1() print(f1) f2 = func_2() print(f2) # 在无返回值的情况下,系统默认返回None
结果如下:
有返回值 1 无返回值 None
-函数文档-
文档写法案例如下
案例条件:介绍文档内容
def stu(name=10,age=10): # 文档会自动帮我们打印参数信息 ‘‘‘ 这是我的文档内容 :param name: :param age: :return: ‘‘‘ print("函数调用成功")# 测试函数是否能成功调用 stu()
使用help文档查看案例
print(help(stu))
结果如下:
函数调用成功 Help on function stu in module __main__: stu(name=10, age=10) 这是我的文档内容 :param name: :param age: :return: None
使用doc文档查看案例
print(stu.__doc__)
结果如下:
函数调用成功 这是我的文档内容 :param name: :param age: :return:
使用doc查询文档并不会出现返回值
文笔不好,仅供参考
要有错误或者有其他更多的见解,欢迎大家加我QQ384435742来交流
想第一时间看更新的文章,请关注,谢谢
标签:关于 函数 orm none 开头 各类 交流 多少 访问
原文地址:https://www.cnblogs.com/ggqjlzt/p/9692913.html