美文网首页
关于python中的函数

关于python中的函数

作者: 脏脏的小泥娃 | 来源:发表于2020-06-01 14:07 被阅读0次
  1. 函数的定义和使用:
    python使用保留字def定义函数,函数就是IPO的一种实现,是对代码的一种抽象。
    使用方法是:

def <函数体>(参数0或多个):
    <函数体>    
    return <返回值>

定义可变数量参数(即参数数量不确定)

def <函数体>(参数, *b):
    <函数体>
    return <返回值>

  1. 局部变量和全局变量
  • 局部变量:是在函数内部使用的变量
  • 全局变量:是在函数外部定义的变量。
    若要在函数内部定义全局变量使用global关键字
  1. lambda函数(匿名函数):返回函数名作为结果。使用lambda保留字定义,函数名是返回结果。用于定义简单的,能够在一行内表示的函数。
    使用方法是:

<函数名> = lambda<参数>:<表达式>
例如:f = lambda x, y : x+y

lambda函数主要用作一些特定函数或方法的参数,仅特殊情况使用。

七段数码管实例:

#SevenDigiteDraw.py
#绘制七段数码管(电子表)
import turtle,time
def drawGap():#绘制数码管间隔
    turtle.penup()
    turtle.fd(5)
    def drawLine(draw):#绘制单段数码管
    drawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(40)
    drawGap()
    turtle.right(90)
def drawDigit(digit):#根据数字绘制七段数码管
    drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,6,8] else drawLine(False)
    turtle.left(90)
    drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
    drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
    drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(20)
def drawDate(date):#date为日期,格式为 '%Y-%m=%d+'
    turtle.pencolor("red")
    for i in date:
        if i == '-':
            turtle.write('年',font=("Arial",18,"normal"))
            #在turtle库中使用turtle.write()函数来绘制一个具体的汉字
            turtle.pencolor("green")
            turtle.fd(40)
        elif i == '=':
            turtle.write('月',font=("Arial",18,"normal"))
            turtle.pencolor("blue")
            turtle.fd(40)
        elif i == '+':
            turtle.write('日',font=("Arial",18,"normal"))
        else:
            drawDigit(eval(i))
def mian():
    turtle.setup(800,350,200,200)
    turtle.penup()
    turtle.fd(-300)
    turtle.pensize(5)
    drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
    #time.gmtime()获取一个内部的时间类型的当前时间,并使用time.strftime()对时间进行格式化
    turtle.hideturtle()#将海龟画笔隐藏
    turtle.done()
mian()#函数定义并不运行,所以最后要调用main()启动函数的运行

  1. 代码复用与函数递归
  • 模块化设计思想:模块内部紧耦合,模块之间松耦合。
    - 紧耦合:两个部分之间交流很多,无法独立存在。
    - 松耦合:两个部分之间交流很少,可以独立存在。
  • 递归(是数学归纳法的编程体现)
    递归的两个关键特性:链条和基例
    - 链条:计算过程中存在递归链条
    - 基例:存在一个或多个不需要再次递归的基例

实例:

#斐波那契数列的递归实现
def f(n):
    if n ==1 or n == 2:
        return 1
    else:
        return f(n-1) + f(n-2)
#汉诺塔问题递归实现
#hanoi.py
t = eval(input("请输入汉诺塔的层数:"))
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)
hanoi(t,"A","C","B")
print(count)

  1. 例题
  • eg1: 题目来自python123.io平台
#参考代码
import random

def genpwd(length):
    a = 10**(length-1)
    b = 10**length - 1
    return "{}".format(random.randint(a, b))

length = eval(input())
random.seed(17)
for i in range(3):
    print(genpwd(length))
  • eg2:
    题目来自python123.io平台
#参考代码
def prime(m):
    for i in range(2,m):
        if m % i == 0:
            return False
    return True

n = eval(input())
n_ = int(n)
n_ = n_+1 if n_ < n else n_
count = 5

while count > 0:
    if prime(n_):
        if count > 1:
            print(n_, end=",")
        else:
            print(n_, end="")
        count -= 1 
    n_ += 1

相关文章

网友评论

      本文标题:关于python中的函数

      本文链接:https://www.haomeiwen.com/subject/yeajzhtx.html