Skip to content

语法

python
def print_content(content):
    print('ChatGIS: ', content)
  • 使用def定义方法,类似与JavaScript中的function
  • 按照PEP8的建议,函数名称应全部使用小写字母,并使用下划线分隔单词
  • 避免使用驼峰命名法(CamelCase),例如,CalculateArea或findMaxValue,除非是为了兼容某些库或框架

函数参数(默认值)

python
def print_default_param(name='ChatGIS'):
    print(name, 'Number One')
print_default_param()
print_default_param('China')

输出

ChatGIS Number One
China Number One

多参数函数

python
def calculateArea(width, height):
    print(width, height)
    return width * height
print(calculateArea(2, 3))
print(calculateArea(height=4, width=5))
print(calculateArea(4, height=5))
# print(calculateArea(width=4, 5))

最后一个语法错误

输出

2 3
6
5 4
20
4 5
20

函数变量作用域

  • 局部变量:在函数中声明的变量,它的作用域是当前的代码块,超出这个范围则变量失效
  • 全局变量:在模块中声明的变量,它的作用域是整个模块
python
name = 'gChatGIS'
def show_name():
    name = 'ChatGIS'
    print('in:', name)
show_name()
print('out: ', name)

输出

in: ChatGIS
out:  gChatGIS

匿名函数与lambda函数

python
# 常规函数
def double(x):
    return x * 2
print(double(2))
# 匿名函数
doubx = lambda x: x * 2
print(doubx(2))
  • 匿名函数没有def关键词

生成器

生成器(Generator)是Python中的一种特殊函数,它可以用来创建迭代器。 生成器函数不同于普通函数,它包含yield关键字。 调用生成器函数不会立即执行,而是返回一个生成器对象。 每次调用这个对象的next()方法,函数会执行到下一个yield语句,返回对应的结果。

python
def my_generator():
    yield 1
    yield 2
    yield 3
print(next(my_generator()))
print(next(my_generator()))
print(next(my_generator()))
gen = my_generator()
print(next(gen))
print(next(gen))
print(next(gen))

输出

1
1
1
1
2
3
  • 将方法赋值给一个变量,否则会执行yield;
  • 惰性计算,这种方式不需要一次姓准备全部结果,可以一点一点生成,节省了大量内存空间。