python基础语法5 函数定义

函数

1、什么是函数
  函数就是一种工具。
  可以重复调用

2、为什么要用函数
  1、防止代码冗(rong)余
  2、代码的可读性差

3、怎么用函数

  1、定义函数-->制造工具
  2、调用函数-->使用工具


  1、无参函数:
    def index():
    print('ok')
  2、空函数:
    def login():
      pass
  3、有参函数:
    def login(username):
      print(username)

可以:a=index

   a()使用函数

返回值:
  1、不写return:默认返回None
  2、只写return:只有结束函数体代码的效果,返回None
  3、写return None :与只写return的效果相同
  4、return返回一个值: 可以将返回的结果,当做一个变量值来使用
  5、return返回多个值:
    1、将返回的多个值,默认存入元组返回
    2、函数的返回值不想被修改
    3、可以自己指定返回的数据类型
函数的参数:
  参数的类型:
    形参:
    实参:

  传参方式:
    位置参数
    关键字参数
    默认参数

  可变长参数:
    *args:接收所有溢出的位置参数
    **kwargs:接收所有溢出的关键字参数
    *:放到实参中就是打散

函数名的命名规范与变量名一样

关键字(def)  函数名(index)   括号:
  函数描述:描述函数体代码的功能

def index(a, b):
    if a > b:
        return a
    else:
        return b
 print(index(1, index(2, 3)))    #调用函数

函数的返回值

1、不写return:默认返回None
2、只写return:只有结束函数体代码的效果,返回None
3、写return None :与只写return的效果相同
4、return返回一个值: 可以将返回的结果,当做一个变量值来使用
5、return返回多个值:
  1、将返回的多个值,默认存入元组返回
  2、函数的返回值不想被修改
  3、可以自己指定返回的数据类型
return:它是一个函数结束的标志,函数体代码只要执行到return,函数执行结束

l1 = [1, 6, 3, 4, 5, 6]

def my_len():
    count = 0
    while True:
        for i in l1:
            if i == 4:
                print(count)
                return
            count += 1

print(my_len())
------------------------------
def func(a, b, c, d, e):
    return a, b, c, d, e

print(func(a, b, c, d, e))
-------------------------------
def func1():
    return 1, "2"

print(func1())

函数的参数

函数是先定义,后调用
在定义阶段只检测语法,
不执行任何代码

positional arguments  位置参数


形参:
  是在函数定义阶段就规定的参数,它就相当于定义变量时的变量名
实参:
  是在函数调用阶段传入的参数,它相当于定义变量时的变量值

#python代码从上到下依次执行
def index(a):  # 形参:相当于变量名
print(a)
print(b)
if a > b:
print(a)
else:
print(b)

a = 1
b = 2
index(a) # 实参:相当于变量值

位置参数:
  通过位置进行传参

关键字参数:
  指定参数进行传参

ps:位置参数一定一定一定要在关键字参数之前,
  连用的时候,不要对同一个形参重复赋值

def foo(a, b, c, d):
    print(a, b, c, d)

foo(1, 2, c=1, d=2)    #a,b为位置参数,c,d为关键字参数

默认参数:
  在定义函数阶段就已经传入参数,
  如果说你在实参的时候传入了一个新的参数,就会使用新参数
  默认参数在传值的时候,不要将可变类型当做参数传递

  应用场景:
    当参数对应值重复出现的情况下使用默认参数

def reg(username, password, gender='male'):
    print(f"用户名:{username},密码:{password},性别:{gender}")

reg('tank','dsb')
reg('jason','dsb')
reg('egon','xsb')
reg('胡晨阳','dsb','female')

注意:如果默认参数使用可变类型数据,那么地址会相

# 第一种解决
def reg(hobby, l1=None):  # 四个形参
    if l1 == None:
        l1 = []
    l1.append(hobby)
    print(f"爱好:{l1}")


reg(hobby='生蚝')
reg('大保健')
reg('女教练')

# 第二种解决方案

def reg(hobby, l1):  # 四个形参
    l1.append(hobby)
    print(f"爱好:{l1}")


reg('生蚝', [])
reg('大保健', [])
reg('女教练', [])

可变长参数:
  *args:接收所有溢出的位置参数
    接收的值都被存入一个元组
  官方认证:*args
  只要有*就有可变长参数的效果

  *:打散你传入容器类型

  **kwargs:接收所有溢出的关键字参数
    接收的值都被存入一个字典

  官方认证:**kwargs

def index(a, b, c,d,e):
    print(a, b, c,d,e)

index(1,2,*(3,4,5))
----------------------------------------
def index(a, b, c,*args):   #接收溢出的位置参数
    print(a, b, c,*args) # 不写*打印args元组

index(1,2,3,4,5)    # 1 2 3 4 5
-----------------------------------------
def func(a, b, c, d,**kw):  # 接收所有溢出的关键字参数
    print(a, b, c, d,kw)    # 打印字典,只能写*(打散,显示key),不能写**

func(1, 2, c=3, d=4, e=5, f=6) # 1 2 3 4 {'e': 5, 'f': 6}
l1 = [1,2,3,4]
t1 = (1,2,3,4)

print(*l1) # 1 2 3 4
print(*t1)  # 1 2 3 4
-------------------------------
def foo(a,b,c,d,e,f):
    print(a,b,c,d,e,f)

def bar(*args,**kwargs):    #接收所有位置参数,关键字参数
    foo(*args,**kwargs)

bar(1,2,3,d=10,e=20,f=30)

猜你喜欢

转载自www.cnblogs.com/ludingchao/p/11828665.html