Python——函数

一、定义

def <函数名>(<参数>):
    <函数体>
    return <返回值>
#计算 n!
def fact(n):
    s=1
    for i in range(1,n+1):
        s*=i
    return s

二、可变参数传递

1、函数定义时可为某些参数指定默认值,构成可选参数

def <函数名>(<非可选参数>,<可选参数>):
    <函数体>
    return <返回值>
#可选参数必须放在非可选参数后面
#计算 n!//m
def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m

2、函数定义时可设计可变数量参数,即不确定参数的数目

def <函数名>(<参数>,*b):
    <函数体>
    return <返回值>
def fact(n,*b):
    s=1
    for i in range(1,n+1):
        s*=i
    for item in b:
        s*=item
    return s

#函数的返回值中,如果 return了多个数据,则用“()”括住,用“,”分隔,即元组类型
def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s//m,n,m

#结果
fact(10,5)
为:(725760,10,5)

a,b,c=fact(10,5)
print(a,b,c)
为:725760 10 5

三、局部变量和全局变量

规则1:基本数据类型,无论是否重名,局部变量与全局变量不同
规则2:组合数据类型,如果局部变量为真实创建,则是全局变量

#规则1
n,s=10,100
def fact(n,m=1):
    s=1
    for i in range(1,n+1):
        s*=i
    return s #此处局部变量 s是3628800
print(fact(n),s) #此处全局变量 s是100

n,s=10,100
def fact(n,m=1):
    global s #可通过 global保留字在函数内部声明全局变量
    for i in range(1,n+1):
        s*=i
    return s #此处 s是全局变量362880000
print(fact(n),s) #此处全局变量 s被函数修改,是362880000

#规则2
ls=["F","f"]
def func(a):
    ls.append(a) #此处 ls是列表类型,未真实创建,等同于全局变量
    return
func("C") #全局变量 ls被修改
print(ls) #结果为:['F','f','C']

ls=["F","f"] #通过使用 []真是创建了一个全局变量列表 ls
def func(a):
    ls=[] #此处 ls是列表类型,真实创建,局部变量
    ls.append(a)
    return
func("C") #局部变量 ls被修改
print(ls) #结果为:['F','f']

四、代码复用与模块化设计

函数 和 对象 是代码复用的两种主要形式

  • 函数:将代码命名.在代码层面建立了初步抽象
  • 对象:属性和方法。<a>.<b><a>.<b>()。在函数之上再次组织进行抽象

紧耦合、松耦合

  • 紧耦合:两个部分交流很多,无法独立存在
  • 松耦合:两个部分交流很少,可以独立存在
  • 模块内部紧耦合,模块之间松耦合

五、函数递归

函数定义中调用自身的方式
两个关键特征

  • 链条:计算过程存在递归链条
  • 基例:存在一个或多个不需要再次递归的基例

实现:函数+分支语句,分别对应链条和基例

#求 n!
def fact(n):
    if( n==0):
        return 1
    else:
        return n*fact(n-1)

#字符串反转
def rva(s):
    if s=="":
        return s
    else:
        return rvs(s[1:])+s[0] #每次将首个字符放在字符串的最后

#斐波那契数列
def f(n):
    if n==1 or n==2:
        return 1
    else:
        return f(n-1)+f(n-2)

#汉诺塔
count=0
def hanoi(n,src,dst,mid):
    global count
    if n==1:
        print("{}:{}->{}".format(1,src,dst))
        count+=1
    else:
        hanoi(n-1,src,mid,dst)
        print("{}:{}->{}".format(n,src,dst))
        count+=1
        hanoi(n-1,mid,dst,src)

转载于:https://www.cnblogs.com/xxwang1018/p/11571490.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值