新手学习Python第七天-新手笔记
07:45达到实验室,已经把昨天的内容复习完了,开始现在的学习
————08:00——————
1.函数的返回值
if i % 2: 非零值被视为真(True),而零值被视为假(False)
——刚才导师来了。聊了比较久。老师可以为我的课题研究方向买ROS小车了。太开心了!!!
呜呜呜~~~一定要好好学习,多发文章,不负老师希望。——08:43开始学习
写一下奇偶数分类的的代码,理解这个返回值
def fun(num): odd=[] even=[] for i in num: if i%2: odd.append(i) else: odd.append(i) return odd,even lst=[22,44,55,12,17] a=fun(lst) print(a)
——老师找我们开个组会—— 08:52
函数的返回值:
1.若函数没有返回值(函数执行完毕之后,不需要给调用数据), return可不写。
2.函数的返回值,若是1个,直接返回原值
3.函数的返回值若是多个,返回的结果为元组
这里我写一下三种情况:
1.第一种情况的:
def fun1():
print('hello') 看到没有,执行就完事了,不需要有返回值,就能直接出结果的这种
fun1()
2.第二种情况:
def fun2():
return('hello') #直接像print那样直接出结果 所以就直接返回原值
b=fun2()
print(b)
————刚刚干完活现在15:49————
3.第三种情况:
def fun(): #先定义一个函数为fun(),记得加: return 'hello','world' #返回的是多个值 s=fun() print(s) #结果为元组的形式
总结一下:我是这样来理解的就是如果你对于让定义的函数直接显示出来的话,那么直接就不用返回值;返回值在写的时候是return,需要用print(),出来,如果是print(),没有return,那么你可以直接写函数,运行就会显示出来。
再来个综合吧:
def fun(): print('hello') fun() #第一种情况 不要return def fun1(): return('hello') print(fun1()) #第二种情况,对于单个值而言返回原类型。 def fun2(): return('hello','world') a=fun2() print(a) #第三种情况,对于返回多个值而言,返回的是元组。
2.函数的参数定义
函数定义默认值参数,有两种情况,第一种
def fun(a,b=10): print(a,b) fun(100) #只有一个参数,默认把值给第一个。 fun(20,30) #这里的20给第一个,30给第二个参数。将10代替。
2.1个数可变的位置参数:
1.无法事先确定传递的位置实参的个数时,使用可变的位置参数
例如:
def fun(*args): #函数定义时,可变的位置参数
print(args)
fun(10)
fun(10,30)
fun(10,30,40) #按照顺序传
利用索引位置
2. 使用*定义个数可变的位置形参
3.结果为一个元组
2.2 可变的关键字形参
1.无法事先确定传递的关键字实参的个数时,使用可变的位置参数
2. 使用**定义个数可变的关键字形参
3.结果为字典
例如:
def fun1(**args): print(args) fun1(a=10,b=20,c=30) fun1(f=60)
可以知道使用**确定的是关键字位置,结果输出为字典。
还有一点需要注意的是:
print('hello', end='\t') # 打印 'hello' 后跟一个制表符 print('world') # 打印 'world',并在末尾添加换行符
这里要用‘end=’就可以了 。
报错情况:
def fun(*args,*agrs): #个数可变的位置参数 pass def fun (**agrs,**args): #个数可变的形式参数 passg
个数可变的位置参数以及个数可变的关键字参数。都只能是一个,超过一个就会报错。
2.3 都有的情况:
def fun1(*args,**agrs): pass def fun2(**args,**args): pass
注意:若既要含有位置形参还有关键字形参,那么要把个数可变的位置形参放在个数可变的关键字形参前面
2.4函数的参数总结:
2.4.1 位置参数:
def fun(a,b,c): print(a,end='\t') print(b,end='\t') print(c,end='\t') fun(80,90,50)
这就是位置形参。
2.4.2 看下列表的:
def fun(a,b,c):
print(a,end='\t')
print(b,end='\t')
print(c,end='\t')
fun(80,90,50)
lst=[20,30,40]
a=fun(*lst)
列表如果直接输出,那么会报错。因为它这个里面是三个元素,而列表是一个整体为一个元素。
需要在列表函数定义的名字前面+* 就可以了。
2.4.3 看下字典的
def fun(a,b,c):
print(a,end='\t')
print(b,end='\t')
print(c,end='\t')
dict ={'a':100,'b':200,'c':300}
v=fun(**dict)
与列表相同,在字典定义的函数名字前面加*,但是两个**
2.5函数参数的各类总结
2.5.1 默认值形参
def fun1(a,b=10): print(a,b)
fun1(10,20) 10给a,20给b
2.5.2 个数可变的位置形参
def fun2(*args): print(agrs)
有一个*记住
2.5.3 个数可变的关键字形参
def fun3 (**args): print(args)
2.5.4 位置实际传参:
fun2(10,30,40,50)
2.5.5 关键字实参传递:
fun3(a=10,b=20,c=30)
2.5.6 混合参数传递:
def fun4(a,b,c,d): print(a) print(b) print(c) print(d) fun4(a=10,b=20,c=30,d=40) 关键字实参 fun4(10,20,30,40) 位置实参 fun4(10,20,c=30,d=40) 前面位置实参+后面的关键字实参 fun4(10,20,c=30,d=40)
def fun4(a,b,* ,c,d): 加入*号之后,这些函数在调用的时候,只能采用关键字参数传递,我们把这个*就叫做关键字形参 print(a) print(b) print(c) print(d) fun4(10,20,c=30,d=40)
函数定义时的形参的顺序问题
def fun1(a,b,*,c,d,**args): pass def fun2(*args,**args): pass def fun3(a,b=10,**args): pass
以上这三种情况都是可以的, 都把关键字形参放入后面。
3.变量的作用域:
3.1关于局部变量
举个例子:
def fun(a,b): c=a+b return(c)
我们看下这个c就被称为局部变量,因为c是在函数体内进行定义的变量,a与b为函数的形参,作用范围也是函数内部,相当于局部变量。
3.2 作用域
def fun(a,b): c=a+b return(c) print(a) print(c)
这样就会报错,因为abc是局部变量,一个是在函数体一个是在fun(),都在他们内部进行,进行完作用效果也就消失了,所以你再去用它的话会报错,需要重新定义变量激活它。即超出了作用域
3.3 全局变量
name ='孙老师' def fun(): print(name) fun()
这个name变量在外面,所以就是全局变量,都可以用它。
def fun(): age=20 函数体 print(age) fun() 使用这个函数,就会执行函数体显示20出来 fun(age) 但这个age属于局部变量,运行就会报错
所以要弄一下全局变量 怎么实现呢?
只需要在函数体中的那个定义类变量前面+一个”global"
def fun(): global age age=20 print(age) fun() print(age)
局部变量使用golobal声明那就是全局变量了。
总结:21:32 还差30节课学完 明天继续加油!