一 . 函数
在编写代码的过程中,需要经常调用相同或者类似的操作,而这些是由同一段代码完成的,而函数的出现,可以帮助我们避免重复编写这些代码。函数的作用就是把相对独立的某个功能出来,使之成为一个独立的个体。
1.1 函数的定义
定义一个函数只要以 “def”开头即可。
def function_name(arg1,arg2):
function body
return value
◇ 函数名(functiom_name):和python中其他的标识符命名规则相同,有效的函数名以字母或下划线开头,后面可以跟字母、数字或下划线,函数名应该能够反映函数所执行的任务。python中的函数名是区分大小写的,相同的字母,不同的大小写视为两个不同的函数。
◇函数参数(arg1,arg2):调用一个函数时可以传递的参数。参数可以有一个或者多个,也可以没有参数。
◇函数内容(function body):任何有效的代码都可以出现在函数内部。注意函数内容相对于定义函数的“def”行需要缩进四个空行。
◇函数返回值(return value):函数执行完成后返回的值。也可以不返回任何内容,不返回内容可视为返回“None”。
#!/usr/bin/env python3
# -*- coding: GBK -*-
def introduce(name):
print("hello",name)
introduce("world")
introduce("蓝山")
运行结果:
hello world
hello 蓝山
1.2 函数参数
1.2.1 必须参数
顾名思义就是函数定义的参数调用时必须传人,并且在调用的时候数量和顺序必须和定义函数时的参数保持一致。
#!/usr/bin/env python3
# -*- coding: GBK -*-
def add(a,b):
print("a + b =",a+b)
add(1,4)
运行结果:a + b = 5
如果少传入一个参数或者多传入一个参数都会引起报错。
1.2.2 关键字参数
关键字参数可以不按函数定义时的参数的顺序来调用函数,python解释器定义时的参数名来匹配参数。
#!/usr/bin/env python3
# -*- coding: GBK -*-
def hello(name,age):
print("姓名",name)
print("年龄",age)
hello(name="零一",age=18)
hello(age=2,name="蓝山")
运行结果:
姓名 零一
年龄 18
姓名 蓝山
年龄 2
1.2.3 默认参数
在定义函数时我们可以给参数添加默认值,如果调用函数没有传入参数,函数就会使用默认值,并且不会像必须参数那样报错。默认参数必须定义在最后,而且在默认参数之后定义必须参数会报错。
#!/usr/bin/env python3
# -*- coding: GBK -*-
def pname(name,age=18):
print("姓名",name)
print("年龄",age)
pname("蓝山")
运行结果:
姓名 蓝山
年龄 18
1.2.4 可变参数
在某些情况下我们不能在定义函数的时候就确定参数的数量和内容,这时候就可以用使用可变参数。
#!/usr/bin/env python3
# -*- coding: GBK -*-
def foo(*args):
print(args)
foo()
foo(1,2)
foo("蓝山",10,"lanshan")
运行结果:
()
(1, 2)
('蓝山', 10, 'lanshan')
#!/usr/bin/env python3
# -*- coding: GBK -*-
def foo(**kwargs):
print(kwargs)
foo()
foo(name="蓝山")
运行结果:
{}
{'name': '蓝山'}
“*args”参数获取到的是一个元组,这也是它能作为可变参数的原因。
“**kwarg” 参数获取到的是一个字典,所以我们在调用函数时必须要用关键字参数方式传参。
1.3 变量作用域
变量的作用域就相当于变量的命名空间,赋值过的变量并不是在哪里都可以使用的。
python有两种最基本的变量作用域:局部变量和全局变量。
1.3.1 局部变量
一般情况下,在函数内赋值的变量,不做特殊声明的都是局部变量。顾名思义,局部变量的作用域是局部的,在当前函数赋值则只能在当前函数使用。
#!/usr/bin/env python3
# -*- coding: GBK -*-
def foo():
x = "hello"
print(x)
foo()
print(x)
运行结果:
hello
Traceback (most recent call last):
File "C:\Users\14978\AppData\Local\Temp\tempCodeRunnerFile.python", line 7, in <module>
NameError: name 'x' is not defined
在函数体内部的执行成功了,在函数体外部的执行失败,并且接收到返回信息:“x”没有定义。
1.3.2 全局变量
在函数外赋值的变量就是全局变量,全局变量可以在整个程序范围内被访问到。
#!/usr/bin/env python3
# -*- coding: GBK -*-
x = "蓝山"
def foo():
x = "hello"
print(x)
foo()
print(x)
运行结果:
hello
蓝山
1.4 函数返回值
如果想要获取函数中的局部变量,可以使用“return”关键字返回。
#!/usr/bin/python
#coding: utf-8
def a():
print("没有return")
def b():
print("有return没有返回值")
return
def c():
x = "lanshan"
print("有return有返回值")
return x
result1 = a()
print(result1)
result2 = b()
print(result2)
result3 = c()
print(result3)
运行结果:
没有return
None
有return没有返回值
None
有return有返回值
lanshan