Python函数

三元运算(三目运算)

是对简单的条件语句的缩写。

# 三元运算表达式
condition_is_true if condition else condition_is_false

result = 值1 if 条件 else 值2
# 如果条件成立,那么将 “值1” 赋值给result变量,否则,将“值2”赋值给result变量

函数

def function(arg):

    pass

作用

  减少代码重复

  方便维护管理,更易扩展

  保持代码一致性

变量:

  • 由字母、数字和下划线构成,不能以数字开头,不能任意特殊字符
  • 变量定义规范,使用驼峰式或者下划线式格式
  • 变量定义尽量简明,易懂,方便使用者应用

作用域:

  作用域就是当程序在处理变量时,存放变量名的空间,也叫做命名空间;

  只有模块、类和函数,才会生产局部作用域,if,for,while,try这些是语句块,不会产生局部作用域 ;

  全局变量只能以只读的方式被局部作用域访问,

  如果想在局部作用域创建或修改全局变量,应使用global声明;嵌套作用域用nonlocal声明;

  查找变量优先级:LEGB,局部作用域(local) > 嵌套作用域(enclosing) > 全局作用域(global) > python内置作用域(built_in);

位置参数:

  定义了位置参数,则传参时是不可缺少的,并且顺序对应;

默认参数:

  创建函数时,可以直接为参数指定默认的数值,默认参数必须指向不可变对象;

可变参数:

  用*定义可变参数,可变参数可以传入0个或任意个参数,这些参数被调用时会自动封装为一个tuple;如果有一个要被传入的参数L是list或tuple,可以*L形式传入;

def f(*args):
    pass
 
f(1,'a',True)
L=[1,2,3,4]
f(*L)

关键字参数:

  用**定义关键字参数,关键字参数可以传入0个或任意个带有参数名的参数,参数会被封装为一个dict,如果有一个要被传入的参数D时dict,可以**D形式传入;

def f(**kw):
    name=name
    age=age
 
f(name=''alice,age=18)
D={"name":"alice","age":18}
f(**D) 

命名关键字参数:

  在参数前以*标记,如果前面有可变参数则可省略*;

def f(*,name):
    pass
 
def f(*args,name):  //*args为可变参数
    pass

组合参数:

  参数为固定顺序,(位置参数,默认参数,可变参数,命名关键字参数,关键字参数)

return:

  默认返回None

  return多个对象,会封装为一个元组

  print只是打印,并不会返回任何值

递归函数:

  函数调用了自己本身就为递归,大量的递归会产生栈溢出,尾递归可以解决栈溢出,但python还是会溢出;

闭包:

  如果一个内部函数里,对外部作用域(全局作用域除外)的变量进行引用时,那么内部函数就被认为是闭包;

  闭包=内部函数+定义此函数时的环境。

  例如函数里面又定义了一个函数,子函数可以调用父函数中的变量;

def outer(i):
    j = 2
    def inner():
        k = 3
        sums = i + j +k
        print (sums)
    return  inner
 
f = outer(1)
f()
# 6

  内部函数inner可以直接引用外部函数outer的参数和变量,这就是闭包。

posted @ 2019-09-11 10:10  houyongchong  阅读(143)  评论(0编辑  收藏  举报