zoukankan      html  css  js  c++  java
  • 函数

    函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执

    行这个函数,只需调用其函数名即可。

    特性:

    减少重复代码   使程序变的可扩展    使程序变得易维护

    def sayhi():#函数名

      print("Hello, I'm nobody!")

    sayhi()  #调用函数

    #函数基本用法

    def calc(x,y):

        res = x**y
    print(res)

    calc(5,10)
    calc(2,10)



    #函数默认参数
    参数可以让你的函数更灵活,不只能做死的动作,还可以根据调用时传参的不同来决定函数内部的执行流程

    形参变量
    只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此形参只在函数内部有效。函数
    调用结束返回主调用函数后则不能再使用该形参变量

    实参
    可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,
    以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值
    #函数默认参数,参数位置要一一对应,位置参数要放最后面。

    def stu_register(name,age,course,country='CN'):
    print("registriation info....")
    print(name,age,country,course)

    stu_register("Alex",22,"python")
    stu_register("Jack",22,"python")
    stu_register("Rain",22,"python",'korean')

    #关键参数
    正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,但记住一个要求就是,关键参数必须
    放在位置参数(以位置顺序确定对应关系的参数)之后

    调用可以这样
    stu_register('王山炮',course='py',age=22,country='JP')

    例:
    def stu_register(name,age,course,country='Cn'):
    print("registriation info....")
    print(name,age,country,course)

    stu_register("Alex",23,course='python')
    #非固定参数
    #报警,1个运维人员

    def send_alert(msg,*users):
    for u in users:
    print('报警发送给',u)

    #如果参数中出现 *user,传递的参数就可以不再是固定个数,传过来的
    # 所有参数打包元祖
    #方式一:
    # send_alert('别他么狼了','alex','xxx','xxx')
    # send_alert('别他么狼了','alex',)
    # send_alert('别他么狼了','alex','xxx')
    # send_alert('别他么狼了','alex','xxx','iiii')

    #方式二: 传递列表或元组,要在列表前加个 * 号
    # 带*号的形参如果在前面,实参对应的位置后面的要赋值,否则会被带*号的形参全截走。
    send_alert('别他么狼了',*['alex','xxx','iii'])

    例:
    def func(name,*args,**kwargs):
        print(name,args,kwargs)
    #传列表
    func('Alex',22,'tesla','500w',addr='山东',num=12442323)

    #传字典加两个*
    d = {'degree':'primary school'}
    func('peiqi',**d)
    #返回值
    函数外部的代码要想获取函数的执行结果,就可以在函数里用return 语句把结果返回
    注意:函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为
    return 语句代表着函数的结束
    如果未在函数中指定return,那这个函数的返回值为None
    return 代表函数的结束,后面再多代码,都不会在执行
    def stu_register(name,age,course):
        print(name,age,course)
    if age > 22:
    return False
    else:
    return name,age  #想返回多个值,可以在后面加逗号。返回的是一个元组。

    status =stu_register('peiqi',29,'安保')
    print(status)
    #局部变量
    定义在函数外部一级代码的变量,叫全局变量,全局能用。
    局部变量 就是指定义在函数里的变量
    在函数内部,可以引用 全局变量
    如果,全局和局部都有一个变量叫name 函数查找变量的顺序是由内而外的。

    # name = "Black girl"
    # def change_name():
    # global name #在函数中修改全局变量
    # name = "黑色的姑娘"
    # age = 25
    # print("在",name,"里面...",id(name))
    #
    #
    # change_name()
    # print(name)

    #在函数里修改列表数据

    # names= ['Alex','Black Gril','Peiqi']
    #
    # def change_name():
    # del names[2]
    # names[1]= "黑姑娘"
    # print(names)
    #
    # change_name()
    # print(names)

    #嵌套函数
    # def func1():
    #
    # print('alex')
    #
    # def fuc2():
    # print('eric')
    # fuc2()
    #
    # func1()
    #======> 1、函数内部可以再次定义函数。
    #======》 2 、执行需要被调用

    age = 19
    def func1():
    print('alex')
    age = 73

    def fuc2():
    print('eric')
    fuc2()

    #作用域
    #python中函数就是一个作用域
    定义完成后,作用域已经生成,作用域链向上查找
    函数名可以当返回值
    作用域
    #python中函数就是一个作用域,局部变量放置在其作用域中
    #定义完成后,作用域已经生成,作用域链向上查找
    age = 18
    def func1():
    age =73
    print('alex')
    def func2():
    age = 84
    print('eric')
    return func2
    val =func1()
    print(val)

    #匿名函数
    # def calc(x,y):
    # if x < y:
    # return x*y
    # else:
    # return x/y
    #
    # func = lambda x,y:x*y if x < y else x/y #声明一个匿名函数
    # #匿名函数不支持复杂的运算,最多支持三元运算
    #
    # print(calc(16,8))
    # print(func(16,8))

    data = list(range(10))
    print(data)

    # for index,i in enumerate(data):
    # data[index] =i*i
    # print(data)

    def f2(n):
    return n*n
    print(list(map(lambda x:x*x,data)))

    #1、节省代码量
    # 2、看着更高级
    #高阶函数
    #变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数
    def func(x,y):
    return x+y

    def calc(x):
    return x*x
    n = func
    calc(n)

    #递归

    #递归
    # def calc(n):
    # n = int(n/2)
    # # print(n)
    # return n
    #
    # r1=calc(10)
    # r2=calc(r1)
    # r3 =calc(r2)
    # print(r3)
    import sys
    # sys.setrecursionlimit(10000)#改限制层 为10000层,一般1000层是不改的。
    print(sys.getrecursionlimit())

    def func():
    pass

    def calc(n):
    n = int(n/2)
    print(n)
    calc(n)
    calc(10)

    #递归就是用同样的逻辑重复多次可以用递归

    #递归执行过程分析
    递归执行完后,再一层一层退出去。

    #递归的返回值

    def calc(n,count):
    print(n,count)
    if count < 5:
    return calc(n/2,count+1) #递归的返回值,return 缺一不可
    else:
    return n #递归的返回值 return缺一不可

    res =calc(188,1)
    print('res',res)

    #递归特性:
    必须有一个明确的结束条件
    每次进入更深一层递归时,问题规模都应会有所减少
    递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,
    栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧,由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)






  • 相关阅读:
    在vs code中进行本地调试和开启本地服务器
    按highcharts中column形式转对象展现格式
    forEach、for in 、 for of三者的区别
    一位数左边补0,slice也可以
    js判断对象是否为空
    谷歌最佳实践
    谷歌最佳实践
    谷歌最佳实践
    谷歌最佳实践
    企业代码版本管理之争:TrunkBased vs GitFlow vs AoneFlow vs OneFlow vs ExeFlow
  • 原文地址:https://www.cnblogs.com/anzhangjun/p/8387315.html
Copyright © 2011-2022 走看看