简单分析Python中的基本函数及其常用用法换句话说,它是由一系列程序语句组成的程序段。函数的意义:1.提高代码的复用性2.简化复杂的逻辑,划分函数定义:小知识:[]表示可选<>表示必要的函数名应该可以直接表达函数的功能,并用_连接多个词<函数名>([参数列表])<:>#要执行的语句#如果需要,显示返回或来定义一个简单的函数:deffunc():print('我执行了')print('程序正常执行')这个时候函数里面的语句没有执行,是不是有点不符合执行程序从上到下的顺序?绝对不是这样。函数有一个特点,就是只有被调用后才能执行。deffunc():print('我执行了')print('程序正常执行')#调用函数,函数名+()func()#先调用函数再定义#抛出异常SyntaxError:invalidsyntax#func()deffunc():print('Iexecutedit')func()程序运行时,先把函数中的代码加载到内存中,有调用时直接执行。第一次调用时,程序还没有将函数读入内存。所以抛出异常。deffunc():print('Hi')print(func)直接打印函数就是函数对应的内存地址。函数的返回值函数可以返回任何类型的数据。return后函数内执行结束,不执行后面的代码deffunc():res=1+1print('我执行了')returnresprint('我不会执行')print('程序是正常执行')#函数中的语句确实执行了,我打印出来执行了func()#如果要获取函数返回的值,需要另外找一个变量接收#注意是我打印出来的这里又执行了一次因为函数又被调用了res=func()print(res)#不写returndefaultreturnNonedeffunc():print('我执行了')res=func()print(res)multiple返回值多个变量receivedeffunc():return1,2,3a,b,c=func()print(a,b,c)原理相同:一个变量receive是一个tupledeffunc():return1,2,3res=func()print(res)同样的参数如果现在我们要计算两个数的和。defsue_for_peace():res=3+3returnresprint(sue_for_peace())如果要计算不同数的和,需要传参。默认是按位置传递(位置之间一一对应)defsue_for_peace(num1,num2):res=num1+num2returnresprint(sue_for_peace(3,3))defsue_for_peace(num1,num2):res=num1+num2returnresprint(sue_for_peace(3,3))关键字传参(对应参数名)defsue_for_peace(num1,num2):print(num1,num2)res=num1+num2returnresprint(sue_for_peace(num2=3,num1=4))混合使用(先位置参数再关键字参数)defsue_for_peace(num1,num2,num3):print(num1,num2,num3)res=num1+num2+num3returnresprint(sue_for_peace(3,num3=1,num2=2))默认值(不传参数则使用默认值,传则使用传入的值)defsue_for_peace(num1=1,num2=2):print(num1,num2)res=num1+num2returnresprint(sue_for_peace())print(sue_for_peace(5,10))混合使用,先按位置传参,再按关键字传参,最后默认值错误演示:defsue_for_peace(num1=1,num2,num3):#这里第一行写错了,默认值只能是最后一行,小编报错print(num1,num2,num3)res=num1+num2+num3returnresprint(sue_for_peace(2,3))defsue_for_peace(num1,num2,num3=3):print(num1,num2,num3)res=num1+num2+num3returnresprint(sue_for_peace(num2=2,3))#先是position再是keyword,编辑报错print(为和平起诉(1,num1=2))#不允许将两个值可变参数(多个不确定参数)传递给同一个形参*List**字典通常是这样的:*args,**kwargsdefsue_for_peace(*args):res=0foriinargs:res+=ireturnres#任意数0也是正确的print(sue_for_peace())print(sue_for_peace(1,2,3,4,5))#如果已经有listli=[1,2,3,4,5]#这里不是把列表作为参数传递,会自动解释成多个参数print(sue_for_peace(*li))deffunc(**kwargs):returnkwargsprint(func())print(func(name='sb',age=22))print(func(**{'name':'sb','age':22}))通常看起来像这样:deffunc(x,y,z,*args,**kwargs):print(x)print(y)print(z)print(args)print(kwargs)func(1,2,3,4,5,6,a=11,b=22)可变类型参数的传递deffunc(li):li[0]=666li=[1,2,3,4,5]func(li)print(li)可以发现实参传递给了形参,形参发生了变化,实际参数will相应改变,不可变类型的传递deffunc(str1):str1='aaa'print('Insidethefunction:',str1)str1='hell0'func(str1)print(str1)不要使用相同的变量了名字让人迷惑...全局变量和局部变量可以在本地使用全局变量,全局变量可以在模块的任何地方使用(也就是这个文件)。局部变量是函数内部声明和使用的数据量,随着函数的开始而诞生,随着函数的退出而消亡。范围可以在函数中局部使用。全局变量temp='hello'deftest():print(temp)不能全局使用。)#print(temp)#NameError:name'temp'isnotdefinedtemp='Hello'deftest():temp='hello'print(temp)print(temp)temp='Hello'deftest():temp='hello'print(temp)test()print(temp)看例子猜答案,试试看,很开心Variable(global)num=1defset_num(in_num):globalnumnum=in_numpassset_num(11)print(num)全局变量,同名的局部变量,还是需要使用全局变量。num=11deftest():num=22#这是局部numprint(num)#打印全局numprint(globals()['num'])test()