博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

python入门_8

Posted on 2017-02-17 00:09  天高鹿苑  阅读(133)  评论(0)    收藏  举报

函数续讲:

1.函数返回值

def test01():
    pass
def test02():
    return 0
def test03():
    return 0,10,'hello',['alex','1b'],{'wu':'1b'}

t1 =test01()
t2 =test02()
t3 =test03()

print('from test01 return is [%s]'%type(t1),t1) #如果没有返回值 python默认为none
print('from test01 return is [%s]'%type(t2),t2) #返回值是整数
print('from test01 return is [%s]'%type(t3),t3) #返回值是多项数值,则是返回类型是元组

2.函数调用:

调用方法:

  1. test()执行,()表示调用函数test,()内可以有参数也可没有

参数:

  1.形参和实参

      1.形参和实参

  形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应)

  实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参

  区别:形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。

   2. 位置参数和关键字(标准调用:参数与形参位置一一对应;)

   3. 默认参数

   4. 参数组

 

3.前向引用

  函数action体内嵌套某一函数logger,该logger的声明必须早于action函数的调用,否则报错

 

4.非固定参数

 当你在函数定义时不确定用户想传入多少个参数,就可以使用非固定参数

def stu_register2(name,age,*args,**kwargs):#**kwargs 会把多传入的参数变成一个字典的形式
    # 

    print(name,age,args,kwargs)

stu_register2('xin',22)
stu_register2('opp',90,'zhou',900,sex='opop',o='popo')#注意,传入kwargs的必须是关键参数

 

def stu_register(name,age,*args): #*args会把多传入的参数变成一个元组形式

    print(name,age,args)

stu_register('xin',22)

stu_register('yang',22,'cn',"python","go")

 

5. 全局与局部变量

  在(子程序)或函数中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

 

全局变量的作用域是整个程序;

局部变量的作用域是定义该变量的子程序;

name = "jay"

def change_name(name):
    print("before change:",name)
    name = "jay chou"
    print("after change",name) #改了 jay chou

change_name(name)

print('看看name改了吗?',name) #没改

 

 

当全局变量与局部变量重名时:

在定义局部变量的子程序内,局部变量起作用;在其他其他地方全局变量起作用。

song = '霍元甲_全局'
def change_song(song):
    song = '周大侠_局部'
    print('在函数内是局部还是全局呢',song)
change_song(song)
print('在外面是局部还是全局呢?',song)