Python函数基础

函数的好处
如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数。定义函数的格式如下:
def 函数名():
    代码
注意:
标识符由字母、下划线和数字组成,且数字不能开头
Python推荐:函数名应该为小写,可以用下划线风格单词以增加可读性。
调用函数很简单的,通过 函数名() 即可完成调用
函数的类型(有参数要输入参数,有返回值的要有变量接收)
函数根据有没有参数,有没有返回值,可以相互组合,一共有4种:
1.无参数,无返回值  此类函数,不能接收参数,也没有返回值,一般情况下,打印提示等类似的功能,使     用这类的函数
2.无参数,有返回值  此类函数,不能接收参数,但是可以返回某个数据,一般情况下,像采集数据,用此类   函数
3.有参数,无返回值  此类函数,能接收参数,但不可以返回数据,一般情况下,对某些变量设置数据而不需结果时,用此类函数
4.有参数,有返回值    此类函数,不仅能接收参数,还可以返回某个数据,一般情况下,像数据处理并需要结果的应用,用此类函数

help(函数名/文档名)可以看到函数里的注释如果是文档就看得见文档里每个函数里的注释

定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参”
实参全部是赋值形式可以改变参数顺序
如果实参有赋值形式还有不赋值的参数赋值的参数必须是最后一个参数(赋值参数后面不能在有参数)

缺省参数调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

Python函数基础

不定长参数

有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名
不定参数*args      不定长参数**kwargs。
加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典

拆包

Python函数基础

Python中a=a+a并不等价a +=a

a +=a方式这种方式还是使用原来的地址
a = a+a方式这种方式开辟了新的空间
带有返回值的函数 想要在函数中把结果返回给调用者,需要在函数中使用return,执行函数是要有参数来接返回值
多返回值
1、把多个值封装到列表里不b=[a,b,c]   return  b
2、第一种方法的另一中写法return[a,b,c]
3、默认是封装到元组里return a,b,c------>(10,20,30)
4、有多个值接受反回值的时候(接参变量与返回值相同时)可以单个赋值给每个变量
一个函数里面又调用了另外一个函数,这就是所谓的函数嵌套调用 
在函数值添加global后修改全局变量(声明变量)如果在函数中修改全局变量,那么就需要使用global进行声明,否则出错
对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
匿名函数定义用lambda关键词能创建小型匿名函数。这种函数得名于省略了用def声明函数的标准步骤。
lambda函数能接收任何数量的参数但只能返回一个表达式的值

匿名函数不能直接调用print,因为lambda需要一个表达式

1. 作为内置函数的参数-表达式
def fun(a, b, opt):
   print("a =%d"%a)
   print("b =%d"%b)
   print("result=%d"%opt(a, b))
fun(1, 2, lambda x,y:x+y)
2 作为内置参数传递-排序(字典中以某一key值排序)
stus.sort(key=lambda x: x["name"])
stus.sort(key=lambda x: x["name"],reverse=True)

匿名函数的扩展-彰显动态语言特点

15.3.1. 在Python3的写法修改成Python3支持的代码-eval
def test(a,b,fun):
   res = fun(a,b)
   return res
func_name = eval(input("请输入一个函数让100和200做运算:"))
print(test(100,200,func_name))
内建函数
启动python解释器,输入dir(__builtins__)可以看到很多python解释器启动后默认加载的属性和函数,这些函数称之为内建函数或者内置函数,

Range()range返回一个迭代值。如果想得到列表,可通过list函数
len函数len()方法语法:len(s)返回对象长度