求知讲堂Python2020-3.函数

函数基础

函数定义:

def 函数名(参数列表):
	代码块

函数调用: 函数()

函数说明文档: 函数内容的第一行可以用字符串进行函数说明

函数参数

传参

必选参数

在调用函数的时候必选参数是必须要赋值的

def sum(a,b): #形式参数:只是意义上的一种参数,在定义的时候是不占内存地址的
	sum=a+b
	print(sum)
	pass
#函数调用
sum(20,15) #20,15 实际参数:实参,实实在在的参数,是实际占用内存地址的

默认参数[缺省参数]

始终存在于参数列表中的尾部

def sum(a=20,b=15): 
 sum=a+b
 print(sum)
 pass
#函数调用
sum() #在调用的时候如果未赋值,就会用定义函数时给定的默认值

可选参数

当参数的个数不确定时使用

def getComputer(*args):
    '''
    计算累加和
    :param args: 可变长的参数类型
    :return:
    '''
    # print(args)
    result = 0
    for item in args:
        result += item
        pass
    print('result=%d'%result)
    pass
   
getComputer(1) #(1,)
getComputer(1,2) #(1, 2)

关键字参数

在函数体内,参数关键字是一个字典类型,key是一个字符串

def keyFunc(**kwargs):
    print(kwargs)
    pass

dictA = {"name":'Leo',"age":35}
keyFunc(**dictA) #{'name': 'Leo', 'age': 35}
keyFunc(name='Leo',age=35,) #{'name': 'Leo', 'age': 35}

可选参数必须放到关键字参数之前
可选参数:接受的数据是一个元组类型
关键字参数:接受的数据是一个字典类型

def complexFunc(*args,**kwargs):
    print(args)
    print(kwargs)
    pass
 
complexFunc(1,2,3,4,name='Xena') 
#(1, 2, 3, 4)
#{'name': 'Xena'}

函数返回值

概念: 函数执行完以后会返回一个对象,如果在函数的内部有return,就可以返回实际的值,否则返回None
类型: 可以返回任意类型,返回值类型应该取决于return后面的类型
用途: 给调用方返回数据
一个函数体内可以出现多个return值,但是肯定只能返回一个return
如果在一个函数体内执行了return,意味着函数就执行完成退出了,return
如果函数需要返回多个结果,将要返回的值用逗号隔开,最终会返回一个包含所有返回值的元组

函数嵌套调用

函数可以嵌套调用,即在一个函数内部调用另外一个函数。
内层函数可以访问外层函数中定义的变量,但不能重新赋值。

局部变量与全局变量

局部变量

在函数内部定义的变量,函数内部的变量名如果第一次数显,且出现在=之前,即被视为该函数定义了一个局部变量,不管是全局域中有没有用到该变量名,函数中使用的将是局部变量。
不同的函数可以定义相同名字的局部变量,但是每个函数内部不会产生影响。
局部变量的作用,是为了临时保存数据,需要在函数中定义变量来进行存储。

全局变量

如果一个变量可以在函数内部调用,也可以在函数外部调用,那么这个变量就称为全局变量。
全局变量能在函数内部访问,也可以在外部访问,但函数内部不能修改全局变量。
全局变量与局部变量重复,局部变量不会影响全局变量,函数使用局部变量。
注: 如果在函数的内部想对全局变量进行修改,必须使用global关键字进行声明

函数参数引用传值

  1. 在python当中,万物皆对象,在函数调用的时候,实参传递的就是对象的引用
  2. 在函数内部的处理是否会影响到函数外部的数据:不可变类型(int、tuple、string)不会改变函数外部的数据,可变类型(list、dict)会改变。

参数传递是通过对象引用来完成

匿名函数

python中使用lambda关键字创建匿名函数,所谓匿名即这个函数没有名字不用def关键字创建标准的函数

lambda 参数1,参数2,参数3:执行代码语句

特点:

  1. 使用lambda关键字去创建函数
  2. 没有名字的函数
  3. 匿名函数冒号后面的表达式有且只有一个,注意:是表达式,而不是语句
  4. 匿名函数自带return,而这个return的结果就是表达式计算后的结果

缺点:lambda只能是单个表达式,不是一个代码块,lambda的设计就是为了满足简单函数的场景,仅仅能封装有限的逻辑,复杂逻辑实现不了,必须使用def来处理。

lambda与三元运算

if a:
	b
else:
	c

等价于:

b if a else c

递归函数

如果一个函数在内部不调用其他的函数,而是自己本身的话,这个函数就是递归函数。
递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,直到到达最大递归深度报错。

优点:

  1. 递归使代码看起来更加整洁、优雅
  2. 可以用递归将复杂人物分解成更简单的子问题
  3. 使用递归比使用一些嵌套迭代更容易

缺点:

  1. 递归逻辑很难调试,递归条件处理不好容易造成程序无法结束,直到达到最大递归错误
  2. 递归占用大量内存,耗费计算机资源

内置函数

任何一门编程语言的核心操作都是操作内存中的数据,但内存中的数据又是通过编程语言的API来实现,所谓的API,就是系统提供给我们的函数,有一种函数是系统预先定义的函数,也就是安装python就自带的函数,我们把它成为内置函数,也叫内嵌函数

定义: 内置函数就是python安装后就自带有的函数

官方文档

数字运算函数

  • abs():求绝对值
  • round():四舍五入取整
  • pow():求指数
  • divmod():求商余数
  • max():求最大值
  • min():求最小值
  • sum():求和
  • eval():执行字符串表达式
a = 1
b = 2
eval('a+b')

eval('a+b+c',{'c':2,'a':1,'b':3})

类型转换函数

  • int()
  • float()
  • str()
  • ord():字符转数字
  • chr():数字转字符
  • bool():转换为布尔型,[],(),{},0,None,0.0,' '都相当于False
  • bin():转为二进制
  • hex():转为十六进制
  • oct():转为八进制
  • list():元组转换为列表
  • tuple():列表转换为元组
  • dict():创建字典
  • bytes():转为字节数组

序列操作

可迭代对象:可作用于for循环的对象
包括:

  1. 集合数据类型:序列、字典、集合
  2. 迭代器对象
  • all():用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果是返回True,否则返回False元素,除了是0,空,False外都算True。**注意:**空元组,空列表返回值为True,这里要特别注意。
  • any():哦那个有判断给定的可迭代参数iterable是否全部为False,如果是返回True,如果有一个为True,则返回False
  • sorted():对所有可迭代的对象进行排序操作
    sortsorted的区别:
    sort是应用在list上的方法,sorted可以对所有可迭代的对象进行排序操作
    listsort方法返回的是对已经存中的列表的操作,而内置函数sorted方法返回的是一个新的list,而不是在原来的基础上进行的操作。
  • reverse():用于反向列表中的元素
  • range():创建一个整数列表,一般用在for循环中
  • zip():用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表,如果哥哥迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
    zip相反,利用*操作符,可以将元组解压为列表,返回二维矩阵式。
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
  • enumerate():枚举,用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

set集合

定义: set(集合)也是python中的一种数据类型,是一个无序且不重复的元素集合

创建集合

# 第一种方式
set1 = {"1","2"}

# 第二种方式
list1 = ['1','2','3','4']
set2 = set(list1)

集合操作函数:

  • add():添加一个元素
  • clear():清空集合的元素
  • difference()a.difference(b),两个集合的差集,a中存在,b中不存在的
  • intersection()a.intersection(b),两个集合的交集,a中存在,b中也存在的
  • union()a.union(b),两个集合的并集
  • pop():随机移除集合中的某个元素并且获取那个参数,a.pop()
  • discard():移除指定元素a.discard(x)
  • update():更新集合
>>> a = {1,2,3}
>>> b = {4,5,6}
>>> a.update(b)
>>> a
{1,2,3,4,5,6}

版权声明:本文为the_water原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。