函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
可以根据自己的需求自行封装代码块,以便于调用。即为自定义函数。
函数定义的规则
实例:
def hello(): ##def空格后加函数名hello和()
print('hello world') ##函数内部输出'hello world'
hello() ##调用定义好的函数
测试结果:

参数的传递
在 python 中,类型属于对象,变量是没有类型的:
可更改(mutable)与不可更改(immutable)对象
不可更改的对象:strings, tuples,numbers
可以修改的对象:list,dict
- 在传递可变对象时,函数内部对参量的改变会影响该对象
- 在传递不可变对象时,函数内部对参数的改变对该对象本身无影响
实例:
def fun(a,b): ##定义函数fun
a = 'test' ##修改参数a的值
b[2] = 'test' ##修改参数b中的值
num = 'str' ##定义数值类型(不可变)
list_test = [2,3,4] ##定义列表类型(可变)
print(num,list_test) ##输出传递参数之前的值
fun(num,list_test) ##调用函数
print(num,list_test) ##输出传递参数之后的值
测试结果:

参数类型
- 必需参数(位置参数):
调用函数时,参数必须按照顺序和对应数量传入。
def fun(num,age,score):
函数体
fun(1,18,98) ##调用时按照顺序且数量相同
- 关键字参数:
调用函数可以不按照函数声明的顺序,关键字参数来确定传入的参数值。
def fun(num,age,score):
函数体
fun(age=18,score=98,num=1)
- 默认参数:
在函数声明时为形参设定默认值,调用函数未传入参数时使用默认参数。
def fun(num=1,age=18):
函数体
fun() ##未传参数时使用函数定义时的默认参数
- 不定长参数:
函数传入参数值不定时,将多余的参数以元组形式封装。
def fun(*num):
函数体
fun('hello','1','2') ##实参数超过形参数,其余参数以元组形式封装,在函数中用num调用```
def fun(**num): ##使用可传入字典类型的参数
函数体
fun(key1=value1,key2=value2)```
def fun(num,*,age): ##*号后面的参数必须用关键字传入
函数体
fun(1,age='20')
函数的返回值
return语句
return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。
不带参数值的return语句返回None。
如果返回多个值,会将多个值封装成元组返回
def hello():
return('hello')
print(hello()) ##将函数作为参数调用时,return语句返回的值,即为函数的值
##这里相当于print('hello')
变量作用域
程序的变量并不是在哪个位置都可以访问的。
访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
Python的作用域一共有4种,分别是:
global和nonlocal关键字
- 在内部作用域需要对全局变量进行更改时
须在内部作用域使用global关键字声明
num = 1
def fun1():
global num # 需要使用 global 关键字声明
print(num)
num = 123
print(num)
fun1()
print(num)
- 在内部作用域需要对外层非全局变量进行更改时
须在内部作用域使用nonlocal关键字声明
def outer():
num = 10
def inner():
nonlocal num # nonlocal关键字声明
num = 100
print(num)
inner()
print(num) # num值为100
outer()
参数检测
isinstance(object,classinfo)
- 来判断一个对象是否是一个已知的类型,类似 type()。
- object -- 实例对象。
- classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。
- 返回值 -- 如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
匿名函数
lambda 用来创建匿名函数。
lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
lambda 函数的语法只包含一个语句
lambda [arg1 [,arg2,.....argn]]:expression
fun = lambda arg1, arg2: expression
fun( 10, 20 ) ##调用时函数的返回值即expression的值