Python--函数(参数、返回值)、递归函数

函数

定义

组织好的、可重复使用、实现独立功能
目的:提高代码重用率
注意:
1、函数名称必须遵循标识符规则:数字、字母、下划线。并且不能以数字开头,不能使用关键字
2、先定义后调用
3、函数不调用是不执行的
4、函数可以调用多次

def prt(): # 定义函数
    print('1楼、鞋类商品')
    print('2楼、女性服饰')
    print('3楼、男装')
    print('4楼、运动装')
floor = int(input('请输入楼层:'))
if floor == 1:
    print('西单大悦城1层欢迎您')
    prt() # 调用函数
    print('您现在在一层')
elif floor == 2:
    print('西单大悦城2层欢迎您')
    prt()
    print('您现在在二层')
elif floor == 3:
    print('西单大悦城3层欢迎您')
    prt()
    print('您现在在三层')
elif floor == 4:
    print('西单大悦城4层欢迎您')
    prt()
    print('您现在在四层')

函数的参数

1、调用的时候,这个函数定义时,有几个参数,就需要传递几个参数
参数值和参数名称是按照函数声明中定义的顺序匹配起来的
2、定义时小括号中的参数,用来接收参数用的,称为“形参”
调用时小括号中的参数,用来传递给函数用的,称为“实参”

在python中函数参数的定义方式有以下4种:
1、位置参数
2、关键字参数
3、默认参数
4、可变参数(*args,**kwargs)

(一)位置参数

在传参的时候,实参传递的顺序按照形参定义的顺序进行传递的传参方式

 def qiuhe(a, b, d):  
     c = a + b + d
     print(c)
qiuhe(2, 3, 4)  
 qiuhe(5, 6, 7)

(二)关键字参数

在传参的时候,以形参等于实参的形式忽略形参定义的顺序进行传参的传参方法。

 def dengji(name, age):
     print('我叫', name)
     print('年龄', age)
 dengji(age=20, name='张惠妹') 

(三)默认参数

定义参数时,给形参一个默认值,在调用函数时,如果不给有默认值的形参传参,会自动采用默认值
(当某个值变化小的时候,我们就可以使用默认值)

def dengji(name, age, sex='男'):
    print(name, age, sex)
dengji('张三', 19)
dengji('李四', 20, '男')
dengji('王五', 21, '女')

(四)可变参数

处理比声明时更多地参数,将传入的参数变成元组(*args)或者字典(**kwargs)

1、元祖参数 *args

通过给形参前面添加*使参数变成一个元组,所有传递的参数变成元组的元素
(注意:args参数名称可以任意命名)

def func(*args):
    print(args)
    print(args[0], args[1])
func(1, 2, 3, 4)

*具有打散序列的功能

a = [1, 2, 3]
print(*a)

b = (1, 2, 3)
print(*b)    # 无论列表还是元组,*都可以打散

c, *d = a
print(c, d)

c, *d = b
print(c, d) # 输出都是列表形式
2、字典参数 **kwargs

通过给形参前面添加**使参数变成一个字典,所有传递的参数变成字典的键值对。
**kwargs结果类型是字典,传递值是以key = value方式传入

字典参数  **kwargs
def kb(**kwargs):
    print(kwargs, type(kwargs))
# 传递值是以key = value方式传入
kb(name = '张三', age = 18)
kb(name = '李四', age = 18, sex = '男')
kb()

一起定义元组参数和字典参数时,元组参数要放在字典参数后。

函数参数总结:
定义函数时参数的顺序:位置参数,元组参数,默认参数,字典参数

(五)函数的返回值

返回值,其实就是返回一个tuple,在语法上返回一个tuple可以省略括号
**
注意:
1、如果函数不写返回值,默认返回None
2、return关键字有两个作用,一个作用是返回内容,另一个作用是结束此方法
(return后面的代码不会执行,因此一般不建议在return后面写代码)
**

def area(r):
    s1 = 3.14 * r ** 2
    c = 2 * 3.14 * r
    return s1, c

ret = area(3)
print(ret)

(六)递归函数

一个函数在内部调用自身本身,这个函数就是递归函数
使用递归函数的条件:
必须留出口;自己调用自己

def jiecheng(n):
    if n == 1: # 递归边界
        return 1
    else:
        return n * jiecheng(n - 1)
x = jiecheng(6)
print(x)

斐波那契数列

方法1:

def tuzi(n):
    if n == 1 or n == 2:
        return 1
    else:
        return tuzi(n-1) + tuzi(n-2)
n = int(input('请输入月份:'))
# print(n, '月的兔子数是',tuzi(n))
for i in range(1, n+1):
    print('第', i, '个月的兔子为:', tuzi(i))

n = int(input("请输入月份:"))
a, b = 1, 1
for i in range(1, n+1):
    if i == 1 or i == 2:
        print('第', i, '个月的兔子为:', 1)
    else:
        a, b = b, a + b
        print('第', i, '个月的兔子为:', b)

生兔子问题

def zbcz(a, start, end, key):
    if start >= end:
        return -1
    middle = (start + end) // 2
    if key > a[middle]:
        return zbcz(a, middle+1, end, key)
    elif key < a[middle]:
        return zbcz(a, start, middle-1, key)
    else:
        return middle
a = [11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
k = int(input('请输入要查找的数:'))
x = zbcz(a, 0, 9, k)
if x == -1:
    print('没有')
else:
    print(k, '的位置是:', x)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值