Python的学习之-函数

什么是函数

函数是指将一组语句的集合通过一个名字(函数名)封装起来,想要执行这个函数,只需调用其函数名即可

1、减少重复代码

2、使程序变的可扩展

3、使程序变得易维护

定义函数的语法

形参

主要的作用就是接受实参参数的传递,并且被语法调用  #形参只有在被调用时才内存单元,在调用解释时,即可释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

实参

主要的作用就是讲参数传递给形参    #实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,他们都必须有确定的值,以便把这些值传递给形参。因此应预先用赋值,输入等办法使参数获得确定值

定义函数的形参,并且将实参传递给形参再调用

def calc(x,y):  #def关键词,calc函数名,括号里的是形参

  res = x**y

  return res

c = calc(a,b)    #括号里的是实参

print(c)

形参也可以是默认值

def calc(x,y=2)   #这样在函数调用时如果形参不指定参数,则在调用时就是默认值,如果指定,则是指定值

关键参数

一般情况下,给函数传参数时要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可(指定了参数名的参数就叫关键参数),关键参数必须放在位置参数(以位置顺序确定对应关系的参数)之后

PS:位置参数就是形参没有指定任何值,所以函数调用时候是按照位置传递的,关键参数就是指定形参的默认值,所以必须放在位置参数的后面,不然在函数传递时候按照位置传递,会出现错误

例:def stu_register(name,age,course='Py',counter='CN'):  #def是函数定义关键字,结尾必须用:结束,这是强制语法

  print("姓名:", name)

  print("年龄:", age)

  print("课程:" ,course)

  print("国籍:", counter)

stu-register(‘Karl’,course='Py',age=22,counter='JP')  #这里Karl没有用赋值去指定赋值给哪一个形参,所以必须对应形参的位置,而后面的实参都有赋值给指定的形参,所以可以不用按位置写

非固定参数

若在函数的定义时不确定用户想传入多少个参数,就可以使用非固定参数(*args和*kwargs)

*args会把多传入的参数变成一个元组形式

def stu(name,age,*args)

  print(name,age,args)

stu('Karl',22)

输出的结果就是Karl 22()  #输出结果后面有一个(),元组符号,这个就是args,因为没有传入任何值,所以就是一个空元组

**kwargs 会把多传入的参数变成一个dict的形式(字典形式)

def stu(name,age,*args,**kwargs)

  print(name,age,args,kwargs)

stu('Karl',22,'cn','Py',sex='male')

输出结果就是Karl 22 ('cn', 'Py') {'sex': 'male'}

PS:*args前面是一个*,**kwargs前面是两个*,args传入时候单个字符串即可,而kwargs传入的时候必须以键值(key=value)传入

返回值(return)

函数外部代码想要获取函数的执行结果,就可以在函数里用return语句把结果返回

def stu_register(name,age,course='Py',counter='CN'):

  print("姓名:" ,name)

  print("年龄:" ,age)

  print("课程:" ,course)

  print("国籍:" ,counter)

  if age > 22:  #这里输出一个判定条件,用return返回后面的结果

    return False

  else:

    return True

s_reg = stu_register(‘Karl’,course='Py',age=22,counter='JP')

if s_reg:

  print('注册成功')

else:

  print('年龄太大‘’)

PS:函数在执行过程中只要遇到return语句,就会停止执行并返回结果,return语句就是函数运行结束的一个语句,如果未在函数中指定return,那么这个函数的返回值为None

全局变量和局部变量

1、在函数中定义的变量就是局部变量,在程序的一开始定义的变量称为全局变量

2、全局变量的作用域是整个程序,局部变量作用域就是定义该变量的函数

3、当全局变量与局部变量同名时,在定义局部变量的函数内,局部变量起作用,在其他地方则是全局变量起作用

name = 'Alex'   #这个是全局变量

def change_name(name):

  print('beore change:',name)

  name ='Karl'  #这个是局部变量,只给下面的调用

  print('after change:',name)

change_name(name)

作用域

作用域(scope),通常来说,一段 程序代码中所用到的名字并不总是有效/可用的,而限定这个民资的可用性的代码范围就是这个名字的作用域

global 声明全局变量函数

def change_name():  #这里没有定义形参

  global name     #用global 函数声明name就是全局变量

  name ='Karl'    

  print('after change:',name)

change_name()   #用为用了global全局函数声明变量name,所以这里也可以打印name

嵌套函数

name = 'Alex'

def change_name():  

  name = 'Alex2'

  def change_name2():

    name = 'Alex3'

    print('第三层:',name)

  change_name2()

  print('第二层:',name)

change_name()

print('最外层:',name)

PS:函数嵌套的调用也是需要按照层级来依次调用的,如果在第二层调用第三层则会报错,所以第二层只能调用第二层

匿名函数(lambda)

匿名函数就是不需要显式的指定函数名

通常函数的调用

def calc(x,y)

  return x**y

print(clac(2,5))

采用匿名函数

calc = lambda x,y:x**y

print(calc(2,5))

匿名函数的主要用法是和其他函数搭配使用

res = map(lambda x:x**2,[1,5,7,4,8])  #这里直接定义了一个变量的计算过程,用lambda函数定义X,冒号后面传递一个计算的方式,最后用列表定义x的值

for i in res:

  print(i)

高阶函数

变量可以指向函数,函数的参数能接受变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数

只要满足以下任意一个条件,即是高阶函数

1、接受一个或多个函数作为输入

2、return返回另一个函数

def add(x,y,f):

  return f(x) + f(y)

res = add(3,-6,abs)

print(res)

递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数

def calc(n):

  print(n)

  if int(n/2) == 0:

    return n

return calc(int(n/2)

calc(10)

猜你喜欢

转载自www.cnblogs.com/shizhengquan/p/9928100.html