1.函数的关键字
方法与函数的区别:函数可以直接调用,而方法必须通过类调用。
关键字def标识着函数
return标识为返回值
def 函数名(参数):
代码
return
2.函数的定义
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
3.函数参数与作用域
参数:
- 必须参数
- 关键字参数
- 默认参数
- 可变参数
- 组合参数
(必须参数):
#! /usr/bin/python3
#-*-coding utf-8 -*-
def test(a,b):
return a + b
test(1,2)
(关键字参数):函数调用使用关键字参数确定传入的参数值
#!/usr/bin/python3
#-*-coding utf-8 -*-
def prsoninfo(age,name):
print('年龄:',age)
print('姓名:',name)
return
personinfo(name='xiaoming',age=18)
(默认参数):默认参数一定要在非默认参数的后面。
#! /usr/bin/python3
#-*-coding utf-8 -*-
def test(a,b,c=100,d=200)
return a+b+c+d
test(1,2)
test(1,2,3)
test(1,2,d=4)
(可变参数):如果需要一个参数能够处理的参数声明时更多,将其封装成一个tuple,这些参数叫做可变参数。常用* args代表。
#! /usr/bin/python3
#-*-coding utf-8 -*-
def personinfo(*args):
for var in args:
print('我是不定长参数:',var)
(组合参数):可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而组合参数允许你传入0个或任意个含参数名的参数,这些组合参数在函数内部自动组装为一个字典dict。常用**kwargs。
#!/usr/bin/python3
# -*- coding:utf-8 -*-
def personinfo(**kwargs):
print('args:',kwargs)
personinfo(name='zhangsan',age=19,address='china')
>>>('args:', {'age': 19, 'name': 'zhangsan', 'address': 'china'})
作用域:
局部变量:只在函数或者方法内才有效,其他地方无法调用。
全局变量:在整个python文件中有效,所有的py文件内的函数或者方法都可以调用。使用关键字global进行声明。
#! /usr/bin/python3
# -*- coding:uft-8 -*-
num = 100
def func():
global num
num
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字来声明。
num1 = 5
def outter():
num1 = 4
def inner():
nonlocal num1
num1 = 3 inner()
print(num1) # 3
outter()
print(num1) # 5
如果全局变量与函数中的局部变量同名,在函数使用时使用的是函数中的局部变量。
在函数中不使用global声明全局变量时不能修改全局变量,其本质上是不能修改全局变量的指向,即不能将全局变量指向新的数据。
对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。
对于可变类型的全局变量来说,因其指向的数据可以修改,所以不使用global时也可修改全局变量。
4.函数的返回值
- 函数需要先定义后调用,函数体中 return 语句的结果就是返回值。如果一个函数没有 reutrn 语句,其实它有一个隐含的 return 语句,返回值是 None,类型也是 ‘NoneType’。
- return 语句的作用: 结束函数调用、返回值
- return 语句位置与多条 return 语句
python 函数使用 return 语句返回 "返回值",可以将其赋给其它变量作其它的用处
所有函数都有返回值,如果没有 return 语句,会隐式地调用 return None 作为返回值
一个函数可以存在多条 return 语句,但只有一条可以被执行,如果没有一条 reutrn 语句被执行,同样会隐式调用 return None 作为返回值
如果有必要,可以显式调用 return None 明确返回一个None(空值对象)作为返回值,可以简写为 return,不过 python 中懒惰即美德,所以一般能不写就不写
如果函数执行了 return 语句,函数会立刻返回,结束调用,return 之后的其它语句都不会被执行了
4.python函数返回返回多个值。
def demand_1_sta(self):
"""demand_1_sta"""
id_path = os.path.join(self.out_path, 'mb_inditity_mask')
out_path = os.path.join(self.out_path, 'demand_1')
hql = DEMAND_ONE_HQL.format(id_path=id_path, out_path=out_path)
rc = common.qe_excute(self.qe, hql)
logging.info('demand 1 statistics done rc:{}.'.format(rc))
return rc, out_path