函数

一、函数基本定义

定义:

  函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只要调用其函数名即可。

特性:

  1.减少重复代码

  2.使程序变的可扩展

  3.使程序变得易维护

二、函数的定义

  def    函数名(参数1,参数2):

    '''函数注释'''

    print(‘函数体’)

    return 返回值

  定义:def 关键字开头,空格之后接函数名和括号,紧接着跟一冒号

      def 是固定的定义语法。

def sayhi():
    print("hello world!")
sayhi()

def calc(x,y):
    res = x**y
    return res
print(calc(4,5))
函数定义

  函数名:函数名是包含字母,数字,下划线的任意组合,但不能以数字开头。取名尽量有意义。

  函数调用返回值=函数名(参数1,参数2)#函数名后面加括号。

  定义一个求计算字符串长度的函数。假如我们的len()函数现在不能用了,那么我们就需要定义一个函数,求字符串的长度。如果我们一次一次的去写相同的代码,会显得很low,这时候我们的函数就能用上了。

def length():
    s = '你好'
    length = 0
    for i in s:
        length += 1
    return length
print(length())
View Code

三、函数的参数

形参变量

  (函数定义时候定义的参数)只有在被调用时才分配内存单元,在调用结束时,即刻释放所有分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。

实参

  (函数调用时传进来的参数)可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使用参数获得确定值。

默认参数

  默认参数一定要跟在位置参数后面。

def stu_info(name,age,course,gender='male'):
    print("----注册学生信息------")
    print("姓名:",name)
    print("年龄:",age)
    print("性别:",gender)
    print("课程:",course)
stu_info('alex',18,'python')
stu_info('alex',18,'python',gender='femal')
默认参数

关键参数

  关键参数必须跟在位置参数后面

 

def stu_register(name, age, course='PY' ,country='CN'):
    print("----注册学生信息------")
    print("姓名:", name)
    print("age:", age)
    print("国籍:", country)
    print("课程:", course)
#调用可以这样
stu_register("王山炮",course='PY', age=22,country='JP' )
#也可以这样
stu_register('王山炮',22)
#但绝不可以这样
stu_register("王山炮",course='PY',22,country='JP' )
#当然这样也不行,这样相当于给age赋值2次,会报错!
stu_register("王山炮",22,age=25,country='JP' )
关键参数

非固定参数(动态参数)

  按位置传值多余的参数全都由args统一接收,保存成一个元组的形式。

  按关键字传值接受多个关键字参数,由kwargs接收,保存成一个字典的形式。

'''拿报警发邮件的举例'''
def send_alert(msg,*users): #(['alex','peiqi','egon'],)把列表打包成一个元素 --->*['alex','peiqi','egon']---->('alex','peiqi','egon')
    for u in users:
        print("报警发给",u)
#如果参数中出现形参(*users),传递的参数就可以不再是固定个数,传过来的错有参数打包成元组
#传参方式一:
send_alert('服务器down了','alex','peiqi','egon')
#传参方式二:
send_alert('服务器down了',*['alex','peiqi','egon'])

'''求多个数字的和'''
def calc(a,b,*args):
    sum = a+b
    for i in args:
        sum += i
    return sum
print(calc(1,2,3,4,5))
*args应用
'''**kwargs接收的未定义的关键字参数'''
def func(name,*args,**kwargs):
    print(name,args,kwargs)
func('alex',22,'tesla',add='山东',num=1234) #*args接收了22,tesla,**kwargs接收了add和num
d = {'degree':'primary school'}
func('alex',**d)  #**kwargs接收了所有的字典

def f(a,b,*args,defult=6,**kwargs):
    '''位置参数,*args, 默认参数,**kwargs'''
    # print(a,b,args,defult,kwargs)
    return a,b,args,defult,kwargs
print(f(1,2,34,56,7,8,9,0,name='alex',age='333'))
#传参数的时候:必须先按照位置传参数,再按照关键字传参数
**kwargs应用

四、函数返回值

1,return的作用:结束一个函数的执行。函数在执行过程中只要遇到return语句,就会停止执行并返回结果。也可以理解成return语句代表函数的结束。

2,如果未在函数中指定return,那么这个函数的返回值为None

3,函数只能返回一个值。如果有多个值(用‘,’隔开),返回为一个元组

def func():
    a = 111
    b = [1, 2, 3]
    c = {'a': 15, 'b': 6}
    # return a#返回一个值
    return a,b,c#返回多个值,变量之间按逗号隔开,以元组的形式返回
print(func())
函数返回一个或多个值

定义一个列表,返回列表最后一个元素

#方法一
def func():
    list=['hello','egon',11,22]
    return list[-1]
print(func())

#方法二
def func_1():
    list=['hello','egon',11,22]
    return list
a,b,c,d = func_1()
print(d)
View Code

五、小结

  1,定义:def 关键字开头,不能改变。

  2,参数:括号来接收参数,如传入多个参数,用逗号隔开

        参数可以定义多个,也可以不定义

                       参数有很多种,如涉及到多种参数时可以使用*args和**kwargs 所有的参数都跟在位置参数后面。

  3,注释:函数第一行语句应该添加注释

  4,函数体:函数内容以冒号起始,并且严格按照缩进。

  5,返回值:return [表达式] 结束函数。不带return、只写一个return、只写return None时都返回None

def 函数名(参数1,参数2,*args,默认参数,**kwargs):
        """注释:函数功能和参数说明"""
        函数体
        ……
        return 返回值


原文地址:https://www.cnblogs.com/chris3201/p/8983751.html