主页

索引

模块索引

搜索页面

函数

基础

python函数:

如果一个Python函数、类方法或属性的名字以两个下划线开始(但不是结束), 它是私有的
类方法或者是私有 (只能在它们自已的类中使用) 或者是公有 (任何地方都可使用)

def <funName>():    #定义
... ...

<funName>() # 调用

实例1:

def func(x):
    global y        #全局变量
    print 'x is', x #打印变量
    x = 2    #修改变量

x = 50  #函数外修改
func(x) #执行函数

//——使用默认参数值::
def say(message, times = 1):
    print message * times

say('Hello')
say('World', 5)

//实例3——ifelse、return語句::
def maximum(x, y):
    if x > y:
        return x
    else:
        return y
print maximum(2, 3)

DocStrings(文档字符串, 它通常被简称为 docstrings, DocStrings是一个重要的工具, 由于它帮助你的程序文档更加简单易懂, 你应该尽量使用它):

def printMax(x, y):
    '''Prints the maximum of two numbers.
    The two values must be integers.'''     # 文档字串
    x = int(x) # convert to integers, if possible
    y = int(y)

    if x > y:
        print x, 'is maximum'
    else:
        print y, 'is maximum'

    printMax(3, 5)
    print printMax.__doc__  #文档打印

参数

参数类型:

位置参数
默认参数
可变参数
命名关键字参数
关键字参数

参数定义的顺序:

位置参数、默认参数、可变参数和关键字参数。
or
位置参数、默认参数、命名关键字参数和关键字参数。

可变参数(*args)-自动组装成元组:

// 加了星号(*)的变量名会存放所有未命名的变量参数
格式:
  def functionname(arg1, arg2=v, *args):

实例:
def printinfo(arg1, *args):
    print(arg1)
    for var in args:
        print(var)


printinfo(10)  # 10
printinfo(70, 60, 50)
# 70
# 60
# 50

关键字参数(**kw)-自动组装成字典:

**kw - 关键字参数
格式:
  def functionname(arg1, arg2=v, args, **kw):

实例:
def printinfo(arg1, *args, **kwargs):
    print(arg1)
    print(args)
    print(kwargs)

printinfo(70, 60, 50)
# 70
# (60, 50)
# {}

printinfo(70, 60, 50, a=1, b=2)
# 70
# (60, 50)
# {'a': 1, 'b': 2}

命名关键字参数(*, nkw):

格式:
  def functionname(arg1, arg2=v, args, *, nkw, *kw):
说明:
  *, nkw - 命名关键字参数,用户想要输入的关键字参数,定义方式是在nkw 前面加个分隔符 *
  如果要限制关键字参数的名字,就可以用「命名关键字参数」
  使用命名关键字参数时,要特别注意不能缺少参数名。

实例:
def printinfo(arg1, *, nkw, **kwargs):
    print(arg1)
    print(nkw)
    print(kwargs)

printinfo(70, nkw=10, a=1, b=2)
# 70
# 10
# {'a': 1, 'b': 2}

printinfo(70, 10, a=1, b=2)
# TypeError: printinfo() takes 1 positional argument but 2 were given
原因:
    没有写参数名nwk,因此 10 被当成「位置参数」,
    而原函数只有 1 个位置函数,现在调用了 2 个,因此程序会报错

变量作用域

全局变量global:

关键字: global

实例:
num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    print(num)  # 1
    num = 123
    print(num)  # 123
fun1()
print(num)  # 123

闭包:

是函数式编程的一个重要的语法结构,是一种特殊的内嵌函数。
如果在一个内部函数里对外层非全局作用域的变量进行引用,那么内部函数就被认为是闭包
通过闭包可以访问外层非全局作用域的变量,这个作用域称为 闭包作用域
闭包的返回值通常是函数。

实例:
def funX(x):
    def funY(y):
        return x * y

    return funY

i = funX(8)
print(type(i))  # <class 'function'>
print(i(5))  # 40

全局变量nonlocal:

如果要修改闭包作用域中的变量则需要 nonlocal 关键字

def outer():
    num = 10

    def inner():
        nonlocal num  # nonlocal关键字声明
        num = 100
        print(num)

    inner()
    print(num)

outer()

# 100
# 100

Lambda 表达式

在 Python 里有两类函数:

第一类:用 def 关键词定义的正规函数
第二类:用 lambda 关键词定义的匿名函数

格式:

lambda argument_list: expression

说明:
  lambda - 定义匿名函数的关键词。
  argument_list - 函数参数
  expression - 只是一个表达式

备注

expression 中没有 return 语句,因为 lambda 不需要它来返回,表达式本身结果就是返回值。匿名函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。

可以这样认为,lambda 作为一个表达式,定义了一个匿名函数,如:

:
g = lambda x:x+1

可看作:
def g(x):
     return x+1

备注

  lambda 定义了一个匿名函数。lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

全局函数方便使用的,filter, map, reduce:

foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
print(filter(lambda x: x % 3 == 0, foo))
print(map(lambda x: x * 2 + 10, foo))
print(reduce(lambda x, y: x + y, foo))

实例:

def make_repeater(n):
    return lambda s: s*n

twice = make_repeater(2)

print(twice('word'))

主页

索引

模块索引

搜索页面