函数
函数参数
一·必须参数
调用函数时参数数量必须保持与定义函数时的参数数量一致
二.关键字参数
关键字参数可以不按函数定义时的参数顺序调用,python解释器能够按照函数定义时的参数名来匹配参数
def printf(age, name):
print(age,name);
printf(3,"hello");
printf(name="hello",age = 1);
三.默认参数
注意默认参数必须定义在最后
def printf(age, name = "小白",goal = 100):
print(age,name,goal);
print("传入三个参数");
printf(18,"小明",90);
print("只传必须参数");
printf(20);
print("不传最后一个参数");
printf(20,"小李");
print("不传第二个参数");
printf(11,goal=90);
四.可变参数
某些情况下我们不能确定参数的数量和内容,这时可以用到可变参数。
基本语法:some_func(*args,**kwargs) //其中括号内的为可变参数。
1.*args获取到的是一个元组
def foo(*args):
print(args);
foo();
foo(1,2,3,4,5);
foo("one","two","three");
输出结果:
()
(1, 2, 3, 4, 5)
('one', 'two', 'three')
2.**kwargs获取到的是一个字典,所以在调用函数时必须要使用关键字参数的形式
def foo(**kwargs):
print(kwargs);
foo();
foo(name ="good");
输出结果
{}
{'name': 'good'}
下面的例子可以很好地显示可变参数的作用
def caculatesum(*args,**kwargs):
s = 0;
for i in args:
s += i;
print(s);
for v,k in kwargs.items():
print(v,k);
caculatesum(1,2,3,4,5, name = "hello");
结果如下:
15
name hello
不只在函数调用时可以使用*与**来声明参数,在函数调用时也可以使用相同的方式来传递参数。
def caculatesum(*args,**kwargs):
print(args);
print(kwargs);
a = (1,2,3,4,5);
b = {
"1":"hello","2":"my","3":"life"
}
caculatesum(*a,**b);
结果如下:
(1, 2, 3, 4, 5)
{'1': 'hello', '2': 'my', '3': 'life'}
x = 3;
def change():
x = 4;
print(x);
change();
print(x);
输出 4,3。可以看出函数体内并没有改变函数体外的值。
如果想改变函数外的值,要用到global关键字。
x = 3;
def change():
global x;#global关键字
x = 4;
print(x);
change();
print(x);
输出4,4
函数返回值
Python的返回值和其他语言的差不多,但是却可以有多个返回值。
例子如下:
def value():
a = 1;
b = 2;
c = 3;
return a,b,c;
print(value());
输出:(1,2,3)
可以看出Python返回的是一个元组。
所以当有多个返回值时就可以赋值给多个变量了
def value():
a = 1;
b = 2;
c = 3;
return a,b,c;
d,e,f = value();
print(d,e,f);
输出:(1,2,3)
lambda表达式
1.以lambda开头表示是lambda表达式。
2.lambda后面有“:”分为两部分,左面相当于函数参数,右面相当于返回值。
3.需要注意lambda表达式没有函数名。
lambda x,y:x+y;
f = lambda x,y:x+y;
print(f(3,4));
使用lambda表达式的情况:
1:程序只执行一次,不需要函数名,方便定义,节省空间。
2,:某些函数要以函数作为参数,但函数本身十分简单,且仅在一处使用。
注释
Python中的文档字符串
def add(x,y):
"""
计算两个数的和
:param x: 第一个数
:param y: 第二个数
:return: x+y
"""
return x+y;
print(add(1,2));
一般来说,文档字符串(docstring)偏向于对特定模组(module)、函数(function)、类(class)和方法(method)的一个总体介绍,更注重于告诉其他程序员应该怎么使用这些模组/函数/类/方法;而注释(comment)则注重于记录代码实现的细节
普通注释
“#”后面可以写注释内容