函数

1、函数是什么?

       函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫         做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。

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

2、使用函数的好处:

    (1)简化代码
    (2)提高代码的复用性
    (3)代码可扩展

3、python中函数的定义:

      定义函数使用def关键字,后面是函数名,函数名不能重复

4、函数的参数

      函数在调用的时候,可以传入参数,有形参和实参

      形参

             形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。

      实参

  •    实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。         
  •    函数调用结束返回主调用函数后则不能再使用该形参变量。
  •    简单点说,形参就是函数接收的参数,而实参就是你实际传入的参数。

举个例子:

def hello():  # 定义函数
    # pass占位
    print('hello')  # 函数体
# 调用函数
hello()

# 函数不调用不会被执行
def write_file(file_name, content):
    with open(file_name, 'w', encoding='utf-8') as f:
        f.write(content)
# 调用函数
write_file('函数', '今天学习函数')
write_file('函数2', '今天学习函数2')   #可调用多次

函数的返回值

  •   每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None。
  •   函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元组中,返回的是一个元组。
  •   为什么要有返回值呢,是因为在这个函数操作完之后,它的结果在后面的程序里面需要用到。
  •   函数中的返回值使用return,函数在遇到return就立即结束。

举个例子:

def read_file(file_name):
    with open(file_name, encoding='utf-8') as f:
        content = f.read()
        # print(content)
        return content  # 函数的返回值
        # 函数没有写返回值的时候,默认返回的是None

result = read_file('函数')
print(result)

# return俩作用:
        # 1、返回数据
        # 2、函数里只要遇到return(return必须写子函数里面),函数立马结束
def t():
    for i in range(5):
        print('ccx')
        return
t()

函数练习

# 1、传参
# 2、把入参转成字符串
# 3、判断参数小数点的个数是否是为1
# 4、判断小数点前面的是否为整数
# 5、判断小数后面是否为整数
def is_float(s):
    s = str(s)
    if s.count('.') == 1:
        left, right = s.split('.')  # 1.1[1,1]
        if right.isdigit() and left.isdigit():
            if int(right) != 0 or int(left) != 0:  # 0.0判断是否不是0.0
                return True
        if left.startswith('-') and left.count('-') == 1:
            num = left[1:]
            if num.isdigit() and right.isdigit():
                if int(right) != 0 or int(left) != 0:
                    return True
    return False

print(is_float('-0.1'))

运行结果:

True

函数的四种形参类型:

1、位置参数:

  •  位置参数,字面意思也就是按照参数的位置来进行传参,比如说上面的calc函数,x和y就是位置参数(必传的),有几个位置参数在调用时就传几个,否则报错。
  •  那如果有多个位置参数的话,记不住哪个位置传哪个了怎么办,可以使用位置参数的名字来指定调用。

举个例子:

# 位置参数
def b(name, age):  # 必填参数,位置参数,一一对应
    pass
b('ccx', 18)

       比如,上面的那个calc函数也可以使用calc(y=1,x=2)这样来调用,这种调用方式叫做关键字传参。

2、默认参数:

  •   默认参数就是在定义形参的时候,给函数默认赋一个值。
  •   比如说数据库的端口,默认给它一个值,这样就算你在调用的时候没传入这个参数,它也是有值的。
  •   so,默认参数不是必填的,如果给默认参数传值的话,它就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数后面定义。

举个例子:

# 默认值参数
def op_file(file, content=None):
    print(file)
    print(content)
op_file('user.txt', 'user1')

运行结果:

user.txt
user1

默认值参数练习

# 默认值参数练习
def op_file(file, content=None):  # 默认值参数
    with open(file, 'a+', encoding='utf-8') as f:
        if content:
            f.write(str(content))
        else:
            f.seek(0)
            result = f.read()
            return result

3、可变参数:

  •   可变参数用*来接收,后面想传多少个参数就传多少个,如果位置参数、默认值参数、可变参数一起使用的的话,可变参数必须在位置参数和默认值参数后面。
  •   可变参数也是非必传的。
# 可变参数
def send_sms(*args):  # ‘*’个数不受限制,放到一个list里面
    print(args)
send_sms(2, 4, 5, 68)
# 注:
# 这个是不是必须传的--非必传
# 是否限制参数个数--不限
# args是个什么--元组

运行结果:

(2, 4, 5, 68)

4、关键字参数:

  •   关键字参数使用**来接收,后面的参数也是不固定的,想写多少个写多少个,当然也可以和上面的几种一起来使用,如果要一起使用的话,关键字参数必须在最后面。
  •   使用关键字参数的话,调用的时候必须使用关键字传参。关键字参数也是非必传的。
# 关键字参数
def t(**kwargs):  # 传入时必须得指定关键字
    print(kwargs)
t(age=18, name='bj')

运行结果:

{'age': 18, 'name': 'bj'}

四种参数混合用(一般很少有人这样用)

  • 必填参数、默认值、可变参数、关键字参数 必须得按照这个顺序来
  • 必填参数必须写到默认值参数前面
  • 默认参数必须在可变参数前面
  • 可变参数必须在关键字参数前面
# 四种参数连用
def test(name, content=None, *args, **kwargs):
    print(name)
    print(content)
    print(args)
    print(kwargs)

举个例子:

def test(name, phone, qq, addr, sex):
    print(name)
    print(phone)
    print(qq)
    print(addr)
    print(sex)

test('183', 'mingzi', '1111', 'beijing', '')  # 须一一对应
test(age=36, addr='beijing', qq='1111', sex='xxx', name='xx')  # 指定关键字参数阔以
test('xiaoming', '1823423', qq='xxx', sex='xxx', addr='xxxx')  # 这个阔以
test('xiaoming', '1823423', qq='xxx', sex='xxx', 111)  # 错误的,不能这么写
open('file', 'w', encoding='utf-8')

 

posted on 2020-05-06 23:41  彩彩常  阅读(968)  评论(0编辑  收藏  举报