zoukankan      html  css  js  c++  java
  • My python day3

    函数

    一、为何使用函数:

    1.代码重用

    2.保持一致性、易维护

    3.可扩展性

    二、函数分为内置函数和自定义函数

    内置函数:python解释器已经为我们定义好了的函数即内置函数

    自定义函数:根据自己的需求实现某种功能

    1 #自定义函数
    2 def 函数名(参数1,参数2,参数3,...):
    3     '''注释'''
    4     函数体
    5     return 返回值

    函数需要先定义才能调用

    三、调用函数:

    函数名 + 括号

    四、函数的返回值:

    调用函数,需要得到结果,必须要有返回值

    调用函数,不需要得到结果,不需要返回值

    无return 则返回None

    1个return 则返回object

    多个return 则返回tuple

    碰到return 则代表函数运行结束

    五、函数的参数

    函数可以没有参数也可以有参数,分为位置参数、关键字参数、默认参数、可变长参数.

    1 def t():
    2     '''无参数'''
    3     print("in the t")
    4 t()
    5 def t2(name):
    6     print("my name is %s"%name)
    7 t2("Ezhizen")
    View Code
     1 def t(x,y):
     2     z = x+y
     3     return z
     4 z = t(1,2)   #位置参数,实参和行参一一对应
     5 def t2(x,y):
     6     z = x+y
     7     return z
     8 z = t2(y=1,x=2)  #关键字参数,位置可以不固定
     9 def t3(x,y,z):
    10     q = x+y+z
    11     return q
    12 q = t3(1,2,z=3)  #位置参数和关键字参数混合时,位置参数必须在关键字参数的左边
    13 def t4(x,y,z=3):
    14     q =x+y+z
    15     return q
    16 q = t4(1,2)   #当有默认参数时,如果不传参数就使用默认值,如果传就使用传的值
    17 def t5(x,*args,**kwargs):
    18     print(x)
    19     print(args)   #args=(2,3)  返回一个元组
    20     print(kwargs)   #kwargs={'a': 5, 'b': 6}  #返回一个字典
    21 t5(1,2,3,a=5,b=6)  #和可变长参数连用时,*args接受位置参数,**kwargs接受关键字参数
    22 t5(1,*[2,3],**{'a': 5, 'b': 6})  
    23 #如果args传递一个列表,则列表前要加*,如果不加,列表就会被当作一个元素,kwargs传递一个字典,字典前需要加**
    View Code

    六、全局变量和局部变量

    在定格定义的是全局变量,在子程序中定义的为局部变量

    局部变量会从局部开始找,找不到再到外一层中找,当局部变量与全局变量重名时,在定义局部变量的子程序中,局部变量起作用,在其他地方全局变量起作用。

    局部变量子程序无global关键字,先读取局部变量,再读取全局变量,无法重新赋值,可变类型内部可以进行元素操作

    如果函数中有global,可以读取赋值全局变量。

    nonlocal 操作上一级变量

    一般情况下,为例区分全局变量和局部变量,全局变量用大写,局部变量用小写。 

     1 name ="Ezhizen"  #全局变量
     2 def f1():
     3     name="a"   #局部变量
     4     def f2():
     5         print(name)   #name="a" 局部变量从局部开始找,无法对全局变量重新赋值
     6     f2()
     7 f1()
     8 
     9 l=[1,32,2]
    10 def f3():
    11     def f4():
    12         l.append(54)   #对于全局可变类型可以进行内部元素操作
    13     f4()
    14 f3()
    15 print(l)
    16 
    17 name ="Ezhizen"
    18 def f5():
    19     # name="a"
    20     def f6():
    21         print(name)    #局部变量不存在时,就会到全局变量中找
    22     f6()
    23 f5()
    24 def f7():
    25     name="a"
    26     def f8():
    27         global name
    28         name="Echizen"  #当存在global 关键字时,可以读取赋值全局变量
    29         print(name)
    30     f8()
    31 f7()
    32 print(name)
    33 def f9():
    34     name="a"
    35     def f10():
    36         nonlocal name  #nonlocal 关键字,可以对上一级变量进行赋值
    37         name="b"
    38     print(name)
    39     f10()
    40     print(name)
    41 f9()
    View Code

    七、函数递归

    一个函数自己调用自己

    递归的条件:1.明确的终止条件2.每进入更深一层递归,规模减小

    九、高阶函数

    1.一个函数接受另一个函数作为参数

    2.返回值中有函数

     1 def g1(func):   #参数中有函数
     2     print(func)
     3 def g2():
     4     print("in the g2")
     5 g1(g2)
     6 def g3():
     7     print("in the g3")
     8 def g4():
     9     return g3   #返回值中有函数名
    10 g3 = g4() 
    11 print(g3)    
    View Code

    十、map、filter、reduce的使用

    1 print(list(map(lambda x:x+1,[1,2,3])))  #
    2 print(list(filter(lambda x:x<5,[1,2,6])))  #过滤
    3 from functools import reduce
    4 print(reduce(lambda x,y:x+y,[1,2,3,4],3))  #累加,起始值为3
    View Code

    十一、内置函数

     1 ord("a")  #ascill码中a对应的数字
     2 chr(97)  #97对应的字母
     3 bytes(name,encoding="utf-8")#转为二进制
     4 bytes(name,encoding="utf-8").decode("utf-8") #二进制解码
     5 dir(all) #查看all下的所有方法
     6 divmod(10,3)  #得到(3,1)
     7 for i,v in enumerate([1,2,3]): #生成序号
     8     print(i,v)
     9 
    10 eval("{'name':'a'}") #从字符串中得到字典
    11 eval("1+2*3")  #计算字符串中的值
    12 globals()  #全局变量
    13 locals()  #局部变量
    14 hash()  #进行hash运算 不可变类型是可hash,可变类型是不可hash的
    15 hex(20) #10进制转为16进制
    16 int("011",base=2)  #2进制转10进制
    17 oct(20) #10进制转8进制
    18 bin(10)  #10进制转2进制
    19 id()  #查看内存地址
    20 isinstance([1,2,3],list) #判断【1,2,3】是不是list的实例
    21 max([1,2,3]) #最大值
    22 
    23 dic=[{"name":"a","age":18},
    24 {"name2":"ab","age":180},
    25 {"name3":"ac","age":1800},
    26      ]
    27 
    28 print(max(dic,key=lambda x:x["age"]) ) #max的本质遍历dic,根据dic的age求最大值
    29 print(list(zip([1,2,3],[4,5,6])))  #拉链函数,对应元素以元组相连接,不对称时,取短的
    30 print(pow(2,3))  #2**3
    31 print(pow(2,3,5)) #2**3%5
    32 l=[1,2,3]
    33 print(reversed(l))  #反转
    34 print(round(1.5))  #四舍五入
    35 sorted([1,3,6,4])  #排序 ,默认升序
    36 sorted([1,3,6,4],reverse=True)  #降序
    37 print(sorted(dic,key=lambda x:x["age"]))  #升序
    38 sum([1,5,6])  #求和
    39 __import__("test")  #导入字符串模块  
    View Code
  • 相关阅读:
    异常显示页面
    SpringBoot项目打包的两种类型1-WAR方式
    SpringBoot项目打包的两种类型1-JAR方式
    Spring Boot项目打包部署
    json转义处理
    xadmin使用
    nginx 反向代理
    python 队列、栈
    Django logging配置
    Tensorflow学习教程------普通神经网络对mnist数据集分类
  • 原文地址:https://www.cnblogs.com/Ezhizen/p/11152905.html
Copyright © 2011-2022 走看看