03函数

 

函数使用def关键字,后面跟上函数名,函数名命名规则一般使用英文单词命名,多个单词之间使用_隔开,()可以存放参数

函数的定义

def test():
    print('in the test funcation')
    return 0

def #定义函数的关键字
test #函数名
()#定义形参
return#定义返回值

注:函数定义好以后,一定要调用才能被执行

函数的打印

思考:如下的函数,执行的时候,会打印出结果吗?

答案:没有输出结果,因为没有print函数,函数相当于z=3,在pycharm中,直接定义一个z=3,是输出不了任何结果的,因为缺少print函数

 

def add(x,y):
    return  x+y

z=add(1,2)

 

  

 

函数的调用

def find_data():
    print('开始查找数据')

def exec_code():
    print('开始执行代码')
    find_data()

#在exec_code()函数中,调用了find_data()

 

函数的返回值return

在函数中使用return关键字可以将结果返回给函数的调用者。

    return其实有两个作用:

  需要用一个变量来接受程序结束后返回的结果

  它是一个结束符,终止程序运行

def test():
    print('in the test_1')
    return 0
    print('程序结束了吗?') #结果中没有打印这句话


x = test()
print(x)
#输出结果
in the test_1
0 

return 0之后的代码就不执行了只执行return前面的代码;变量x接受了test()函数结束后的返回结果。

没有返回值的函数

思考:如下的函数,会打印出什么结果?是10吗?

结果:输入的是None

def f(x):
    x=10
z=f(100)
print(z)

 

 因为:def f(x) 没有返回值,只要函数没有返回值,都显示None

 

函数的参数

为函数设置参数,可以让函数的功能更加灵活。

def login(name):
    print(f"{name}登录成功")

login('xiaoming')
login('xiaohong')
login('admin')
#输出结果为:
xiaoming登录成功
xiaohong登录成功
admin登录成功

  函数的必填参数

函数中定义参数,如果没有默认值,则为必填参数;必填参数只要在函数中定义,不管在函数内部有没有被调用到都无所谓;但是在外部调用的时候一定是有多少个参数,传入多少个参数。

 

def f(x, y, z):
    return True

f(1)

 

  f(x,y,z)函数定义了三个参数,所以在调用的时候也要传3个参数,否则就会报错

   函数传参

定义的函数参数默认传参按照位置进行传参

def study(name,place="凡猫"):
    print(f'{name}在{place}学习Python自动化')

study('xiaoming')
study('xiaoming','51testing')
#输入结果
xiaoming在凡猫学习Python自动化
xiaoming在51testing学习Python自动化

  也可以指定参数名进行传参

def study(name,place="凡猫"):
    print(f'{name}在{place}学习Python自动化')

study(name='xiaoming',place='51testing')
study(name='wanggang',place='Office')
#输出结果为:
xiaoming在51testing学习Python自动化
wanggang在Office学习Python自动化

  也可以第一个参数不指定参数名

def study(name,place="凡猫"):
    print(f'{name}在{place}学习Python自动化')

study('xiaohong',place='51testing')
#输入结果为:
xiaohong在51testing学习Python自动化

  如果第一个参数传参的时候指定了参数名,那么后面的参数也都要需要指定参数名,否则会报错

def study(name,place="凡猫"):
    print(f'{name}在{place}学习Python自动化')

study(name='fubeibei','51testing')

  

 

 

 函数参数的默认值

如果函数有默认值,传参的时候默认值处不传参,则使用默认值;如果传参,则会把默认值覆盖掉;

def study(name,place="凡猫"):
    print(f'{name}在{place}学习Python自动化')

study('xiaoming') #如果函数中,参数有默认值,调用的时候不传参数。会自动使用默认值

#输出结果为:
xiaoming在凡猫学习Python自动化

  在定义函数参数的时候,必填项一定要放到首位,有默认值的参数要放到后面,否则会报错

def study(place="凡猫",name):
    print(f'{name}在{place}学习Python自动化')

study('xiaoming')

  

 

 总结:

    必填项必须放到前面

    有默认值参数放在后面

*args可变长度元组参数

当参数名前面使用*来装饰的时候,这个参数在函数中为元组类型,可以传多个参数,也可以不传,如果传多个参数,那么这些参数会放到元组中;args:是argument的缩写,argument<数,逻>自变数

def desc(name,hometown,age,*likes):
    print(type(likes))
    print(f'我的名字是{name},来自{hometown},今年{age}岁,我的爱好{likes}')

desc('小明','上海',20)
desc('小张','背景',21,'游戏','爬山')

  输入结果:

<class 'tuple'>
我的名字是小明,来自上海,今年20岁,我的爱好()
<class 'tuple'>
我的名字是小张,来自背景,今年21岁,我的爱好('游戏', '爬山')

  当定义的函数中有用到必填项,可变长度参数,有默认值参数的时候,定义参数的顺序参考如下代码:

def f(name,*likes,age=10):
    print(name,age,likes)
    
f('xiaoming')
f('xiaoming',age=15)
f('xiaohong','sports')

  输出结果如下:likes输出的都是元组的形式

xiaoming 10 ()
xiaoming 15 ()
xiaohong 10 ('sports',)

  **kwargs可变长度的字典类型数据

带有**类型的参数,表示参数类型为字典,传参的时候需要使用关键字=value的方式进行传参,在函数内部转化为{key:value}数据格式;可以不传,也可以传多个数据;

def desc(name,hometown,age,*lies,**kwargs):
    print(type(kwargs),kwargs)

desc('小明','上海',20)
desc('小明','广州',21,project='自动化测试',workyear=3)

  输出结果为:

<class 'dict'> {}
<class 'dict'> {'project': '自动化测试', 'workyear': 3}

  如果一个函数中有多种参数类型,定义的时候参数顺序如下:

def f(name,*likes,age=10,**others):
    print(name,likes,age,others)
    
f('xiaoming')
f('xiaoming','games','sports',age=11,username='xiaowang')

  

 

posted @ 2020-11-06 18:45  haoaixiao  阅读(70)  评论(0编辑  收藏  举报