一、函数的定义与调用
'''
定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个':'
     def 是固定的,不能变,它就是定义函数的关键字
   函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。
     虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能
   括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。
调用:就是 函数名() 要记得加上括号。
'''
return 返回一个值
def count_len(s):
     length = 0
     for i in s:
         length+=1
     return length

 s = 'abcdefg'
 print(count_len(s))

 函数的返回值 return
 没有返回值,不写return的情况下,会默认返回一个None

 只写return,后面不写其它内容,也会返回None,一旦遇到return,结束整个函数
 def fun():
     return
     print(112)

 print(fun())

 返回多个值,可以返回多个,任意数据类型的值
 返回的多个值会以元祖形式返回,也可用多个值来接收
 def fun():
     return 1,['a',2],{'namet':'alex'},(5,6)

 print(fun())

 返回多个值用一个变量接收
 def get():
     return 'a',[2,1],{'name':'alex'}

 s = get()
 print(s)

 返回多个值用多个变量接收
 def get():
     return 'a',[2,1],{'name':'alex'}

 a,b,c = get()
 print(a,b,c)

 函数的参数
 实参与形参
 实参:调用函数时传递的'alex'叫做实际参数,因为这个是实际要交给函数的内容,简称实参
 形参:定义函数是的name,只是一个变量的名字,被称为形式参数,因为在定义函数时它只是一个形式
      表示这里有一个参数,简称形参
 传递多个参数:参数可以传递多个,多个参数之间用逗号隔开
 def get_info(name):
     return name
 get_info('alex')

 位置参数
 1、站在实参角度,按照位置参数
 def func(x,y):
     if x>y:
         return x
     else:
         return y

 print(func(10,20))

 2、按照关键字传值
 def func(x,y):
     if x>y:
         return x
     else:
         return y

 print(func(y=2,x=3))

 3、位置、关键字形式混着用
 def func(x,y):
     if x>y:
         return x
     else:
         return y

 print(func(2,y=3))

 正确用法
 问题一:位置参数必须在关键字参数的前面
 问题二:对于一个形参只能赋值一次

 站在形参角度:位置参数必须传值
 def fun(x):
     return
 print(fun())
 TypeError: fun() missing 1 required positional argument: 'x'

 默认参数
   1、正常使用
         使用方法
         为什要有默认参数:将变化比较小的值设置成默认值

   2、默认参数的定义
 def get_info(name,sex='male'):
 打印学生信息函数,性别默认为男性
     return name,sex
 print(get_info('alex'))
 print(get_info('taibai','female'))

   3、参数陷进:默认参数是一个可变数据类型
 def default_param(a,l=[]):
     l.append(a)
     return l
 print(default_param('a'))
 print(default_param('b'))

 动态参数
'''
动态参数:也叫不定长传参,就是你需要传给函数的参数很多,不定个数,那这种情况下,你就用*args,
        **kwargs接收,args是元祖形式,接收除去键值对以外的参数,kwargs接收的只是键值对参数
        并保存在字典中
'''
 def trans_param(*args,**kwargs):
     print(args,type(args))
     print(kwargs,type(kwargs))

 trans_param('a',1,[2,3],('c','d'),{'name':'alex'},age='male',a=123)