语法:
def myfunction():
print('this is a function')
函数中带有参数
def myfunction(number):
print('this is a function ' + str(number))
myfunction(5)
我们在学习C语言的时候知道,实际参数给形式参数传递的时候以值的形式传递,因此对于形式参数的更改并不会对于实际参数造成影响。我们看看python的
def myfunction(number):
number = 10
print(number)
num = 100
myfunction(num)
print(num)
我们发现python中也出现了这种情况,那么要想改变实际参数的值怎么办?C语言中引入传地址,C++中引入 引用 。python中会怎么解决呢?
我们来看python中规定 :
对于基础数据类型,如int,float,str,boolean等,是值传递。传递的是数值。
对于复杂数据类型,如list,dict,set等,是址传递。传递的是引用
查了半天有两个方法:
1: 直接返回然后用实际参数接收(这实际上还是不是通过函数进行的改变,就是一个偷梁换柱的思想)
def pass_value(number):
number = 10
return number
test_number = 100
test_number = pass_value(test_number)
print(test_number)
2 : 用复杂的数据结构包一层
def pass_value(number):
number[0] = 1
test_num = 10
packet = [test_num]
pass_value(packet)
print(packet[0])
函数带有默认参数值
def myfunc(count = "count"):
print(count)
myfunc(1)
注意:这里的默认参数值可以和实际参数值类型不一致
任意参数
如果您不知道将传递给您的函数多少个参数,请在函数定义的参数名称前添加 *。
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Phoebe", "Jennifer", "Rory")
pass语句
函数定义不能为空,为空需要用pass代替
def myfunction:
pass
递归
涉及函数就必须有递归
来看leetcode 斐波拉契数列
https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/
class Solution {
public:
int fib(int n) {
if(n <= 1)
{return n;}
else
{return fib(n-1) + fib(n-2);}
}
};
python中写法
def fib(n):
if (n <= 1):
return n
else:
return fib(n-1) + fib(n-2)