python基础——函数

函数的定义

函数是一段就具有特定功能的、可重复调用的语句组,用函数名来表示并通过函数名进行功能调用,而不需要在每个执行的地方重复编写这些语句。
函数能够完成特定功能,与黑盒类似,对函数的使用不需要了解函数内部实现的原理,只要了解函数的输入输出方式即可。严格地说,函数是一种功能抽象。

函数表示方式
def <函数名>(<输入参数>):
    <函数体>
    return <返回值>

参数列表是调用该函数时传递给它的数值,可以由零个、一个或者多个,当传递多个参数时,各参数采用逗号分隔,当没有参数时也要保留小括号。

函数的调用过程

1.调用程序在调用处暂停执行
2.在调用时将实参复制给函数的形参
3.执行函数体语句
4.函数调用结束给出返回值,程序回到调用前的暂停处继续执行

函数的参数传递

形参:全称为"形式参数" 由于它不是实际存在变量,所以又称虚拟变量。是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数.在调用函数时,实参将赋值给形参。因而,必须注意实参的个数,类型应与形参一一对应,并且实参必须要有确定的值。
实参:全称为"实际参数"是在调用时传递给函数的参数. 实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

b=[4,5,6]         
print(b)           
def test (d):       #定义函数test,其中d为形参
    b=[7,8,9]     
    print("函数内部变量",b)
    print("输入参数",d,"并用0替换4")
    d[0]=0
def main():
    print("全局变量b",b)
    print("现在调用函数test输入b")
    test(b)                 #调用函数test,其中赋值给函数的b,就是实参
    print("函数调用结束")
    print("全局变量b",b)    
main()

参数默认值:在函数定义时,如果有些参数存在默认值,即部分参数不一定需要调用程序输入,可以在定义函数时直接为这些参数指定默认值。当函数被调用时,如果没有传递对应的参数值,则使用函数定义时的默认值替代。
可选参数:由于函数调用时需要按顺序输入参数,可选参数必须定义在非可选参数的后面。(例如该形参已有默认值,函数调用时可以不输入参数值,所以该形参为可选参数)
可变数量参数:在函数定义时们可以设计可变数量参数,通过在参数前面增加星号(*)实现。带有星号的可变数量参数只能出现在参数列表的最后。

def test (a,d=1,*c):    
   <函数体>
'''
其中d是带默认值的参数,如果调用函数时不赋值给b,那么b默认等于1
*c是可变数量参数,它可以是零个或者多个输入,可变数量参数只能出现在参数列表的最后
'''

传递方式:函数调用时,实参默认采用按照位置顺序的方式传递给函数。同时,python提供了按照形参名称输入实参的方式,由于调用函数时指定了参数名称,所以参数之间的顺序可以任意调整。

函数对变量的作用

全局变量:全局变量是指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效。
局部变量:指在函数内部使用的变量,只作用函数内部,函数一但结束,该变量即得到释放,即使函数多次调用,函数之间互不影响。
列表:列表的赋值和传递,仅仅是产生列表的一个新的引用。即,列表在内存中只有存在一个,对于该列表对其它地方赋值或者传递,只是对该内存的一个新的引用。所以,在函数中,列表有点类似全局变量。传递进函数内部进行计算的列表,对于该列表,只要函数中对列表进行修改了,该列表就修改了,函数外部的该列表也就修改了。

b=[4,5,6]           #全局变量
print(b)            #打印全局变量b
def test (d):       #定义函数test,输入全局变量b
    b=[7,8,9]       #局部变量b
    print("函数内部变量",b)
    print("输入参数",d,"并用0替换4")
    d[0]=0
def main():
    print("全局变量b",b)
    print("现在调用函数test输入b")
    test(b)
    print("函数调用结束")
    print("全局变量b",b)    #函数内部改变列表b,函数外部列表b发生改变
main()

输出:在这里插入图片描述

递归

函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用,也就是函数调用函数本身。这种函数定义中调用函数自身的方式称之为递归。
递归的两个关键特征:
1.存在一个或多个基例,基例不需要再次递归,他是确定的表达式。
2.所有递归链要以一个或多个基例结尾
(递归函数是由限制的,当满足某个条件时结束递归调用,即递归函数不可以无限调用自身)

绘制多边形

import turtle
pi=3.1415926 #定义Π

def Astep(long,direction,angle):   #画一条线,输入线的长度,之后的方向状态
    turtle.pendown()
    turtle.fd(long)
    if direction==1:
        turtle.right(angle)
    else:
        turtle.left(angle)
    turtle.penup()

def Analyse(n,l=800):       #n边形,计算多边形内角
    angle=(n-2)*180/n
    angle=180-angle
    long=l/n
    d=l/pi/2
    x=pow(pow(d,2)/2,0.5)
    turtle.goto(-x,x)
    for i in range(n):
        Astep(long,1,angle,)

def SetWin(wid=800,hig=600,startX=200,startY=200,Psize=5,Pcolor="black"): #窗口初始化设置
    turtle.setup(wid,hig,startX,startY)
    turtle.pensize(Psize)
    turtle.pencolor(Pcolor)
    turtle.speed(1)
    turtle.penup()

def infor():        #用户需求信息收集
    n=eval(input("请输入多边形边数(大于2且是整数):"))
    r=eval(input("请输入多边形周长,不确定时请输入“0”"))
    return n,r
def main():    #主函数
    n,r=infor()
    SetWin()
    if r==0:
        Analyse(n)
    else:
        Analyse(n,r)
    
main()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值