函数2

一些例子:

def test1():
print('in the test1')       代表test1这个函数的主逻辑,如果执行,会先print,然后再return
return 0
print('test end')           不管写什么都不运行了,如果以后有程序需要写着3行代码,直接test1()即可
x = test1()                   return的那个值赋值给了x
print(x)


def test(x,y):               这里面的xy叫做形参
      print(x)       
      print(y)

第一种:

test(1,2)                    1 2叫做实参

第二种:

x=1                            定义了一个内存对象x在引用他
y=2
test(y=y,x=x)             第一个y代表test里面的形参,后面那个y代表第上面行指定的内存对象

第三种:

test(y=1,x=2)            当时这种情况的时候,实参的顺序与形参的顺序是没有关系的

第四种:

test(1,y=2)        

这种情况比较复杂,首先第一个非定义x=..or y=..的常数是定义给x的,如果既有关键字调用,又有位置调用,则按照位置的来,比如第一个是x=1,然后2,则他先赋给x=1,然后x=1又为2,就会报错,所以关键字调用不能写在位置调用的前面,也就是说比如关键字a b c d,如果想把d用关键字调用,则前面的a b c一定要是位置调用。

③默认参数

def test(x,y=2):                  默认y=2,如果后面不赋值也可以print出来
print(x)
print(y)

test(1)                               这一行其实是代表着给x赋值了1

所以最终的结果是print出来1,2

默认参数的特点:调用函数的时候,默认参数可有可无,并非必须传递的,如果没有传递,用默认值,如果有传递,则用传递值。

用途:下载,一键下载

⑤当实参个数不确定时:


def test(*args):
print(args)
test(1,2,3,4,5,5)             当你的实参不确定的时候,可以对形参前面加*号
test(*[1,2,4,5,5])             args=tuple[1,2,4,5,5] 将args变成一个元组

这两个的运行结果是一样的,结果都为一个元组(1, 2, 3, 4, 5, 5)

def test1(x,*args):
print(x)
print(args)
test1(1,2,3,4,5,6,7)

这个则会将1赋给x,然后后面的数作为一个元组

如果想输出一个字典怎么办:

**kwargs:把N个关键字参数,转换成字典的方式

def test2(**kwargs):
print(kwargs)
print(kwargs['name'])
print(kwargs['age'])
print(kwargs['sex'])

test2(name='alex',age=8,sex='F')
test2(**{'name':'alex','age':8,'sex':'F'})     注意,这一行一定要跟上一一对应

输出结果:

{'name': 'alex', 'age': 8, 'sex': 'F'}
alex
8
F

倒数第二个例子-------分割线---------------

def test3(name,**kwargs):
print(name)
print(kwargs)

test3('alex',age=18,sex='m')

在这个例子中,alex会赋值给name,后面两个则形成字典。

最后一个例子-------分割线---------------

def test4(name,age=18,*args,**kwargs)
print(name)
print(age)
print(kwargs)
print(args)
test4('alex',2,3,4,sex='m',hobby='tesla')

在这里面需要注意的有:‘’alex'赋值给name,2赋值给age,3,4形成元组,后面两个形成字典,如果里面没有2,3,4则args输出为(),因为args不能接收字典的形式,如果后面加了一个age=18,则前面不能有2,3,4

 

posted @ 2017-11-03 14:54  仔仔爱python  阅读(153)  评论(0编辑  收藏  举报