python基础07--函数

1.1 函数

1、函数的返回值,return  当函数结束的时候,给调用方一个结果

a  只要函数执行到return  函数就会停止执行 ,函数中可以有多个return

b  函数中如果不写return,默认返回None

c  函数中只写一个return,也是返回None

d  return 一个返回值, 调用方能接受一个返回值

e  return 多个返回值, 多个值需要用,隔开  接受的时候是tuple类型的数据

   return ‘大妈’,’小护士’,’老师’

 

2、函数的参数

def  函数名(形参):

函数体

函数名(实参)  调用

 

多参数的时候,形参和实参需要个数一样

 

站在实参的角度:

a 位置参数

def zhuang(name,age):  print("my name is %s ,my age is %s"%(name,age))

调用zhuang("zhuang",30)

 

b 关键字参数

def zhuang(name,age):  print("my name is %s ,my age is %s"%(name,age))

调用zhuang(name = "zhuang",age = 30)

 

c 混合参数,注意顺序,先写位置参数,在写关键字参数

def zhuang(name,age,high):  print("my name is %s ,my age is %s"%(name,age))

调用zhuang("zhuang",age = 30,high = “165”)

 

站在形参的角度:

a 位置参数

def zhuang(name,age,high):  print("my name is %s ,my age is %s"%(name,age))

调用zhuang("zhuang",age = 30,high = “165”)

 

b 默认值参数    默认值调用时,可以用age=40  或者直接写 40

def zhuang(name,age=30):  print("my name is %s ,my age is %s"%(name,age))

调用zhuang("zhuang")

调用zhuang("zhuang",40)     

 

c 位置参数和默认值参数 先写位置参数,然后写默认值参数

 

3、形参的不定参数:*args  **kwargs

       顺序: 位置参数,*args, 默认参数, **kwargs  

def(a,b,c,*args,d=”women”,**kwargs):

 

def  func(a,b,c,*args,d=5)   这种d会生效    

  func(1,2,3,4,5,6,7)     

   动态参数接受到的是tuple类型的数据

*args    动态接受位置参数  

**kwargs 动态接受关键字参数

 

def func(**kwargs):

func(a=”women”,b=”29”,c=”ben”)

 

4、实参*  **

*:站在实参的角度上,给一个seq加上*,就是将这个序列按照顺序打散

    seq: 任何序列,列表,字符串,元组,字典(字典的key值)

**: 打散字典

def func(*args):

print(args)

lis=[1,2,3]

func(*lis)  #打散

 

5、*  在调用函数的时候打散    在接受的时候聚合

 

6、作用域

命名空间既 变量或者函数的名称

a内置命名空间,python提供的

b 全局命名空间,直接在py文件中声明出来的变量

c 局部命名空间,在函数内声明的变量和函数

d 加载顺序 内置>全局>局部    

e 取值顺序 局部>全局>内置  就近原则

   内部函数使用外部函数的数据

a = “zhuang”     全局

def func():       全局

a = “马化腾”  局部

print(a)      

def funb():    局部

print(women)

 

作用域:

a 全局作用域:全局命名空间+内置命名空间

b 局部作用域: 局部作用域

c globals()  获取全局作用域

      locals()  查看当前作用域中的名字

 

7、补充

对于不可变数据类型,在局部可以查看到全局作用域中的变量,但是不能修改,如果想要修改,需要添加global声明

如果在一个局部(函数)内声明了一个global变量,那个这个变量在局部的所有操作对全局的变量有效

a = 1

def func():

print(a)    #调用函数打印 1

 

a=1

def func()

a+=1     #调用函数时报错,

 

8、函数的嵌套  

 

9、global nonlocal

   global     函数内部声明改变量为全局变量

   nonloclal  声明局部作用域中离他最近的变量引用过来

    声明后的变量,修改后则影响既修改的是原作用域中的数据

 

num = 1

def fun1():

     global num  # 需要使用 global 关键字声明

     print(num)

    num = 123

     print(num)

fun1()

输出结果:  1   123

 

num = 20

def outer():

     num = 10

     def inner():

         nonlocal num   # nonlocal关键字声明

        num = 100

         print(num)

     inner()   #函数嵌套,调用inner()

     print(num)

outer()

输出结果:  100  100

 

10、函数

    如果形参的默认参数是一个可变类型数据,那么每一次调用函数的时候,如果不传值就会公用这个数据类型的资源

 

不可更改:字符串,数字,元组  函数内修改不影响

可更改:  列表,字典          函数内修改,影响外部的参数

猜你喜欢

转载自www.cnblogs.com/fbug/p/11792935.html