目录
1. What is 函数?
以前我们都熟知函数有一次函数(正比例函数),二次函数,三次函数等等各种数学公式。通过各种方式求得结果的一种解决方法,而这里也是一样,函数就是一种解决方法。接下来我们就来看下函数的定义:
逻辑框架:
def 函数名([参数1],[参数2],[….]):
函数体
值得注意的有:1.函数严格区分大小写 2.函数重名会被覆盖 3.函数后面有一个冒号 4.函数名遵循命名规则
了解完定义,还得知道怎么用才是运用。接下来就来讲解函数的调用,其中方式为:
函数名([参数1],[参数2…])
2. 函数的参数
2.1普通参数
了解完函数的定义及调用,接下来我们就可以体会一下其中的内涵啦!!!首先是函数中的参数,其中参数有形参(在定义函数的时候 括号内的变量)以及实参(在函数调用的时候 传入的参数),然后就是关键字参数,对于关键字就是你的形参名可以形容在调用的时候使用形参名=值
例如:
def func(a,b,c): #a,b,c为形式参数
pass
func(1,2,3) #其中1,2,3为实际参数
func(c=10,b=20,a=30) # 关键字参数
在了解参数定义的以后,我们能联想到在生活中有很多东西都是规定好的(默认的),因此在这里有定义一个默认参数,其中机构为:
def 函数名(参数名=值…):
实例:
def func(a = 10, b = 10): # 正确给形参默认值的操作
def func(a, b = 10): # 正确给形参默认值的操作
#def func(a = 10, b): # 错误给形参默认值的操作
pass
注意:
- 函数在定义的时候 如果有形参 且没有默认值,必须传实参
- 如果没有形参则不能传实参
- 如果形参没有默认值 那么实参的个数必须和形参的个数相同
- 如果形参有默认值 那么可以不用传实参
- 形参和实参一一对应
- 当给形参的默认值时 必须遵循默认值的规则
2.2 收集参数
由于python的随意性,我们了解在很多情况下,也就是传入的参数的个数不固定,我们引入了收集参数的定义。同时地下出现了元组与字典属性,对于元组类型,是个有序的集合。而对于字典类型,我们可以理解为成对出现的键值对,能够从前面探知到后面的类型。
(1) 以元组的形式去接收 *参数名 (任意数量的实参)
注意的有:
- args前面带有星号*
- 能够与普通参数共存
实体结构:
def 函数名(*args): (args 可以随意取)
pass
-
实例:
def demo(*args): print(args) print(type(args)) # 都为tuple # demo(1,2,3,4) # (1, 2, 3, 4) demo(1) # (1,) demo() # () 空元组
(2) 以字典的形式去接收不确定实参 **kwargs (任意数量的关键字实参)
主体结构:
def 函数名(**kwargs): pass
函数名(x=1,y=2,z=3)
实例:
def demo(**kwargs): print(kwargs) # {'x': 1, 'y': 2, 'z': 3, 'a': 4} print(type(kwargs)) # <class 'dict'> demo(x =1,y=2) # ok
(3) 将参数为字典的值变成为关键字参数传入函数 **实参名
主体结构:
def 函数名(**kwargs): passmyDict = {'x':1,'y':2} # 字典的值 函数名(**myDict) # 等价于需要传入关键字参数 函数名(x=1,y=2)
实例:
-
def func(**kwargs): print(kwargs) myDict = {'x':1,'y':2} func(**myDict) # ok # {'x': 1, 'y': 2}
(4) *args和**kwargs的组合
-
主体结构:
-
def 函数名(*args,**kwargs): pass
注意:
- *args和**kwargs的实参可传可不传,不传的话为空元组,空字典
- *args和**kwargs的实参 可以对某个不进行传参 某个不传参数的为空元组或空字典
- 组合的顺序: 位置参数,默认参数(x=1),可变参数(args),键值对参数(关键字参数kwargs)
实例:
def func4(*args, **kwargs):
print(args)
print(kwargs)
func4(x=1,y=2) # () {'x'= 1, 'y'= 2}
func4(x=5) #{'x'= 5}
3. 函数的返回值return
1.return 会把值返回给调用处(就是函数名()的位置)
函数执行遇到return 就认为执行完毕 下面代码不在执行
def sum(x, y):
print("输出的和为:")
return x + y # 函数执行 遇到return 就认为函数完毕 下面代码不在执行
# print("输出的和就是:") # 不执行
print(sum(1, 2)) # 返回值为 3
2.return 返回多个值
def func():
pass
return 1,2,3
# tuple 这种写法返回元组
3.函数无返回值时,默认返回NONE
4.函数变量的作用域
对于变量而言,我们主要研究在于范围,其中有全局和局部之分。而在函数这部分讲解,是因为他的区分是在函数。在函数外部定义的变量我们称之为全局变量,在函数内部定义的变量我们称之为局部变量。值得注意的是:函数内可以用全局变量,但函数外不可以用局部变量。
实例
num1 = 23 #全局变量
def func1():
print(num1) #23
func1
def func2():
num2 = 32423dfjk
print('局部变量为:{0}'.format(num2))
dunc2()
print('num2') #NONE
但是为了方便,我们可以将局部变量声明为全局变量,关键字为global
num1 = 11 #全局变量
def func3():
global num1 = 22 #局部变量为全局变量
print(num1)
func3()
print(num1) #结果为22
5. 函数导入的方式
在了解到这些之后,我们必须的有一个更高的认识。对于日常中我们经常会建立文件夹来归类相同的事物,等需要用时就知道在哪进行打开,对于函数也是如此。每当我们定义好一个函数以后,就会将它进行打包放到一个库中,等日后需要用时,我们就进行调用,其形式如下所示:
from 库名 import 包名
from 库名 import 包名 as 别名
from 库名.包名 import 方法名1,方法名2,…
import 包名 as 别名
___name___:系统属性 可以在包被引入时候 可以判断当前程序执行是否在主文件里,在主文件里值为__main__
作用:在运行时检测该模块是被导入还是被直接执行
如果模块是被导入,__name__的值为模块名字;如果是被直接执行,__name__的值为"__main__"。
注意:
- 不要将包或者库的名字中存在数字,起一个规范的有意义的字母的名字
- 如果模块包含的属性和方法与你的某个模块同名,你必须使用import module来避免名字冲突
6.函数文档
函数文档的作用在于提供函数相应的参考信息
6.1文档写法
- 使用三引号来进行注释
- 一般具有特定格式
- 参看案例
-
def func5(): ''' 这是多行注释信息 注释函数作用 不在运行中 ''' for i in [1:20]: print(i) func5()
6.2文档查看
- 使用函数help,形如help(func);
- 使用_doc_,查看案例
-
help(func5()) func5._doc_