四.Python函数基础(上)
1.函数基础
概念:
 函数是具有某一功能的代码块,针对某一个功能的代码块多次出现,为了提高编程效率,将这个代码块组织为一个模块,这就是函数
 语法:
def 函数名(参数):
	...(代码块)
# 调用
函数名(参数)
例:
def a():
    print("hello")
a()
# 结果为打印hello.需要再次调用时,直接a()即可调用
注: 编写函数时,代码块需要换行缩进
2.函数参数
参数是为了给函数提供数据,给函数实现某项特定的功能所提供的一个值
形参和实参:
- 一.必选参数
形参:只是意义上有的参数,实际并不占有内存地址
 实参:实际存在的参数,占有内存地址
 例:
def a(b,c):
    num=b+c
    print(num)
a(10,20)
# 结果为打印30.此处b和c就是形参,为调用时传递进来的实参占位,10和20就是实参.
Python中函数参数是引用传递(注意不是值传递).对于不可变类型,因变量不能修改,所以运算不会影响到变量自身;而对于可变类型来说,函数体中的运算有可能会更改传入的参数变量.
必选参数:
def a(b,c):
    num=b+c
    print(num)
a()
# 如果程序这样执行会有报错,因为给定了必选参数,却没传递实参
- 二.缺省参数(默认参数)
缺省参数,在调用函数时如果没有传参数,
 那么会使用定义函数时给的缺省值.
 缺省参数必须在参数列表的最后面,否则会报错
 例:
def a(b=10,c=20):
    print("{}".format(b*c))
    pass
a()
# 结果为打印200
缺省参数同样可以传递实参,只是在没有传递实参的情况下会使用缺省参数
 例:
def a(b=10,c=20):
    print("{}".format(b*c))
    pass
a(20)
# 结果为打印400
- 三.不定长参数
一个函数有时候会处理比当初声明的参数要多,这就是不定长参数,定义函数时不用声明参数名.加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;而加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典.
 不定长参数:
 例:
def a(*args):
    c=0
    for b in args:
        c+=b
    print(c)
a(1,2,3,4,5)
# 结果为15,利用for循环取出所有值后相加,得出累加值.
- 4.关键字可变参数:
 有两种方法可以传递
 例1: (直接传递)
def a(**kwargs):
    print(kwargs)
    pass
a(Name="xiaoli",Age=15)
# 结果为打印{'Name': 'xiaoli', 'Age': 15}
例2: (通过赋值的字典传递)
def a(**kwargs):
    print(kwargs)
    pass
b={"Name":"xiaoli","Age":15}
a(**b)
# 结果为打印{'Name': 'xiaoli', 'Age': 15}.两者结果一致.
两者组合使用
 例:
def a(*args,**kwargs):
    print(args)
    print(kwargs)
    pass
a(1,2,3,Name="xiaoli",age=15)
# 结果为分行打印(1, 2, 3)和{'Name': 'xiaoli', 'age': 15}
3.函数返回值
概念:
 函数执行完后会返回一个对象,在函数内部若有return就有实际返回的值,无则返回None.
 可以返回任意类型,返回值类型取决于return后面的类型.在一个函数体中可以有多个return,但是最后只能返回一个return.如果在一个函数体内执行了return,意味着函数已经执行完成退出了,return之后的代码不会继续执行.
 使用方法:
def 函数名(参数):
	...(代码块)
	return ...
例:
def a(b,c):
    d=b+c
    print(d)
    return 10
print(a(5,15))
# 结果为分行打印20和10.20是d的值,10是函数返回的值.
4.函数嵌套调用
函数可以嵌套调用,即在一个函数内部调用另外一个函数.
 内层函数可以访问外层函数中定义的变量,但不能重新赋值(rebind)
 使用方法:
def 函数名(参数):
	...(代码块)
	函数名(参数)
例:
def a():
    print(1)
def b():
    print(2)
    a()
b()
# 结果为分行打印2和1
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号