zoukankan      html  css  js  c++  java
  • Python基础 4.函数

    4.1 函数的定义

    • 函数的定义:

      def 函数名(参数): pass return 表达式

      函数名命名规则: 字母、数字和下划线组成,和变量命名规则一致 pass在这里表示什么都没有,不执行任何操作 return 后面可以返回任意表达式,但不能是赋值语句

    • 函数调用:

      函数名(参数)

    • return 和 print 的区别:

      return没有写返回值的话,默认None

      return是函数的返回值,返回值可以赋值给变量,而print只是打印出来

    4.2 函数参数

    • 必备参数:

    1 def func(x):
    2     print(x)
    3 
    4 func(1)
    • 默认参数:

    1 def func(x, y=None):
    2     print(x)
    3     print(y)
    4 
    5 func(1) 
    6 func(1, 2)

      注意:默认参数要位于必备参数列表的后面

     

    • 形参与实参

        形参即变量名,实参即变量值,函数调用时,将值绑定到变量名上,函数调用结束,解除绑定

      1 def sq(data):  #形参
      2     print(data)
      3 ret=123
      4 sq(ret) #实参
    • 不定长参数:

    1 def  func(*args, **kwargs):
    2     print(args)
    3     print(kwargs)

       args: 参数包装成一个元组 kwargs: 参数包装成字典

       调用1:func(1, 2, 3, a=4, b=5, c=6)

          调用2:func(*(1, 2, 3), **{'a': 4, 'b': 5, 'c': 6})

     1 def func(a,b,c):
     2     print(a)
     3     print(b)
     4     print(c)
     5 my_list=[1,5,2]
     6 func(*my_list)
     7 #一个  * 解包列表等     两个解字典
     8 

    9 def foo(*args,**kwargs): 10 print( 'args=', args) 11 print('kwargs=', kwargs) 12 foo(1,2,3) 13 foo(a=1,b=2,c=3) 14 foo(1,'b','c',a=1,b='b',c='c') 15 foo(*["a","b","c"],**{"a":"a","b":"b"}) #列表、字典
    ps:参数顺序(位置参数,*args,默认参数,**kwargs)

    执行结果:

     
    • print (func()): 函数返回值
    • print (func) : 函数本身

    4.3 Python中简单内置函数

    • 内置对象查看:

      dir(builtins)

    • 常见函数:

        len 求长度

        min 求最小值

        max 求最大值

        sorted 排序

        reversed 反向

        sum 求和

    • 进制转换函数:

      bin 转换为二进制 oct 转换为八进制 hex 转换为十六进制 ord 字符转ASCII码 chr ASCII码转字符

    • 一、内置函数

      1.1、作用域相关

      1 locals()  #以字典的类型返回当前位置的全部局部变量。
      2 globals() #以字典的类型返回全部全局变量。

      1.2、迭代器生成器相关

      1 range()  #可创建一个整数对象,一般用在 for 循环中
      2 next() #内部实际使用了__next__方法,返回迭代器的下一个项目。
      3 iter()  #用来生成迭代器(将一个可迭代对象,生成迭代器)同于:__iter__()

      1.3、基础数据类型相关

      1 bool()   #用于将给定参数转换为布尔类型,如果没有参数,返回 False
      2 int()   #用于将一个字符串或数字转换为整型。
      3 float()  #用于将整数和字符串转换成浮点数。
      4 list()   #将一个可迭代对象转化成列表
      5 tuple()  #将一个可迭代对象转化成元祖
      6 dict()  #创建一个字典
      7 set()  #创建一个集合
      8 str()  #转化成字符串

      1.4、转换及运算相关

       1 bin() #将十进制转换成二进制并返回。
       2 oct()#将十进制转化成八进制字符串并返回
       3 hex()#将十进制转化成十六进制字符串并返回。
       4 print(bin(10),type(bin(10)))  # 0b1010 <class 'str'>
       5 print(oct(10),type(oct(10)))  # 0o12 <class 'str'>
       6 print(hex(10),type(hex(10)))  # 0xa <class 'str'>
       7 abs()#返回数字的绝对值。
       8 divmod()#计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。
       9 round()#保留浮点数的小数位数,默认保留整数。
      10 pow()#求x**y次幂。(三个参数为x**y的结果对z取余)
      11 print(abs(-5))  # 5
      12 print(divmod(7,2))  # (3, 1)
      13 print(round(7/3,2))  # 2.33
      14 print(round(7/3))  # 2
      15 print(round(3.32567,3))  # 3.326
      16 print(pow(2,3))  # 两个参数为2**3次幂  结果8
      17 print(pow(2,3,3))  # 三个参数为2**3次幂,对3取余。 余数2
      18 sum()#对可迭代对象进行求和计算(可设置初始值)。
      19 min()#返回可迭代对象的最小值(可加key,key为函数名,通过函数的规则,返回最小值)
      20 max()#返回可迭代对象的最大值(可加key,key为函数名,通过函数的规则,返回最大值)
      21 print(sum([1,2,3]))  #6
      22 print(sum((1,2,3),100))  #106
      23 print(min([1,2,3]))  # 返回此序列最小值1
      24 ret =min([1,2,-5,],key=abs)  # 按照绝对值的大小,返回此序列最小值
      25 print(ret) #1
      26 dic ={'a':3,'b':2,'c':1}
      27 print(min(dic,key=lambdax:dic[x]))# x为dic的key,lambda的返回值(即dic的值进行比较)返回最小的值对应的键
      28 print(max([1,2,3]))  # 返回此序列最大值3
      29 ret =max([1,2,-5,],key=abs)  # 按照绝对值的大小,返回此序列最大值-5
      30 print(ret)
      31 dic ={'a':3,'b':2,'c':1}
      32 print(max(dic,key=lambdax:dic[x]))# x为dic的key,lambda的返回值(即dic的值进行比较)返回最大的值对应的键
      33 reversed() #将一个序列翻转,并返回此翻转序列的迭代器。
      34 slice() #构造一个切片对象,用于列表的切片
      35 ite =reversed(['a',2,3,'c',4,2])
      36 fori inite:
      37     print(i)  #2 4 c 3 2 a
      38 li =['a','b','c','d','e','f','g']
      39 sli_obj =slice(3)
      40 print(li[sli_obj]) #['a', 'b', 'c']
      41 sli_obj =slice(0,7,2)
      42 print(li[sli_obj])  #['a', 'c', 'e', 'g'],开始、结束、步长
      43 format() #与具体数据相关,用于计算各种小数,精算等
      44 bytes()#用于不同编码之间的转化。
      45 s ='你好'
      46 bs =s.encode('utf-8')
      47 print(bs)  #b'xe4xbdxa0xe5xa5xbd'
      48 bs =bytes(s,encoding='utf-8')
      49 print(bs)  #b'xe4xbdxa0xe5xa5xbd'
      50 s1 =bs.decode('utf-8')
      51 print(s1) #你好
      52 bytearry()#返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256
      53 ret =bytearray('jump',encoding='utf-8')
      54 print(id(ret))
      55 print(ret)
      56 print(ret[0])
      57 ret[0] =65
      58 print(ret)
      59 print(id(ret))
      60 memoryview()
      61 ret =memoryview(bytes('你好',encoding='utf-8'))
      62 print(len(ret))  #6
      63 print(ret)   #<memory at 0x008A0BF8>
      64 print(bytes(ret[:3]).decode('utf-8'))  #
      65 print(bytes(ret[3:]).decode('utf-8'))   #
      66 ord()#输入字符找该字符编码的位置
      67 chr()#输入位置数字找出其对应的字符
      68 ascii()#是ascii码中的返回该值,不是就返回/u...
      69 print(ord('a'))  #97
      70 print(ord(''))  #20013
      71 #chr 输入位置数字找出其对应的字符
      72 print(chr(97))  #a 
      73 print(chr(20013))  #
      74 #是ascii码中的返回该值,不是就返回/u...
      75 print(ascii('a')) #"a"
      76 print(ascii('')) #'u4e2d'
      77 repr()#返回一个对象的string形式

      1.5、常用相关

       1 id() #用于获取对象的内存地址
       2 hash#获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值
       3 print() #输出
       4 input() #输入
       5 open() #打开文件
       6 type()  #对象类型
       7 len#返回一个对象中元素的个数(长度)
       8 dir() #查看一个对象的方法
       9 help()  #帮助方法
      10 isinstance() #来判断一个对象是否是一个已知的类型,类似 type()
      11 a=123
      12 isinstance(a,int) #True
      13 __import__#用于动态加载类和函数
      14 __import__('a')        # 导入 a.py 模块

      1.6、其他相关

       1 eval()#执行字符串类型的代码,并返回最终结果
       2 exec()#执行字符串类型的代码。
       3 compile()#将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值。
       4 eval('2 + 2')  # 4
       5 s ='''
       6 for i in [1,2,3]:
       7     print(i)
       8 '''
       9 exec(s)  #1 2 3
      10 complex()#函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。
      11 filter()#过滤
      12 deffunc(x):returnx%2==0
      13 ret =filter(func,[1,2,3,4,5,6,7])
      14 print(ret)  #<filter object at 0x006327B0>
      15 fori inret:
      16     print(i)  #2,4,6
      17 zip() #拉链方法
      18 #用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同
      19 l1 =[1,2,3,]
      20 l2 =['a','b','c',5]
      21 l3 =('*','**',(1,2,3))
      22 fori inzip(l1,l2,l3):
      23     print(i)   #(1, 'a', '*')  (2, 'b', '**')  (3, 'c', (1, 2, 3))
      24 map()#会根据提供的函数对指定序列做映射。
      25 defsquare(x) :            # 计算平方数    
      26     returnx **2
      27 map(square, [1,2,3,4,5])   # 计算列表各个元素的平方 [1, 4, 9, 16, 25]
      28 sorted()#对所有可迭代的对象进行排序操作
      29 L =[('a', 1), ('c', 3), ('d', 4),('b', 2), ]
      30 sorted(L, key=lambdax:x[1])               # 利用key[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
      31 students =[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
      32 sorted(students, key=lambdas: s[2])            # 按年龄排序[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
      33  sorted(students, key=lambdas: s[2], reverse=True)    # 按降序[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
      34 frozenset()#返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
      35 enumerate()#枚举,返回一个枚举对象 (可迭代对象加序号)
      36 li =['a','b','c','d','e']
      37 fori inenumerate(li):
      38     print(i)
      39 forindex,name inenumerate(li,1): #索引默认从0开始,可改成1开始
      40     print(index,name)
      41 all()#可迭代对象中,全都是True才是True
      42 any()#可迭代对象中,有一个True 就是True
      43 callable() 检查是否是函数  返回True、False
      44 defadd(x,y):returnx+y
      45 callable(add)             # 返回 True
      46 a=123
      47 callable(a)  #返回False

      1.7、类相关

       1 object() #是Python中所有类的基类,如果定义一个类时没有指定继承哪个类,则默认继承object类。
       2 staticmethod()#静态方法
       3 classmethod()#是一个装饰器函数,用来标示一个方法为类方法
       4 property()#静态属性
       5 super() #用于调用父类(超类)的一个方法
       6 issubclass() #方法用于判断参数 class 是否是类型参数 classinfo 的子类。如果 class 是 classinfo 的子类返回 True,否则返回 False。
       7 vars() #返回对象object的属性和属性值的字典对象,如果没有参数,就打印当前调用位置的属性和属性值 类似 locals()
       8 hasattr(object,name) #判断name是否在object,判断object中是否有一个叫name的方法或者属性
       9 getattr(object,name,"xxx")#取object中name 的值,xxx为找不到报错信息,否则找不到报错
      10 setattr(x,y,v) #给x对象中的y属性设置值v
      11 delattr(x,y)#删除对象x中y

       1.8、几个重要的内置函数

      1 zip()
      2 filter()
      3 map()
      4 max()
      5 min()
      6 sorted()
      7 enumerate()

    4.4 Python中高级内置函数

    • 返回一个可以枚举的对象

      enumerate

    • 取出字符串中的内容

    • 将字符串str当成有效的表达式来求指并返回计算结果

      eval

    • 执行字符串编译过的字符串 不返回结果

      exec

    • 过滤器

      filter

    • 对于参数中的每个元素都应用函数中,并将结果作为列表返回

      map()

    • 将对象逐一与()中的方法配对

      zip

       

     1     my_list=[1,2,5,6,9,8,7,4,5,66,55,54,444,]
     2     def sorted_func(data,my_order):
     3         if my_order is True:
     4             result=sorted(data,reverse=False)
     5             return result
     6         elif my_order is False:
     7             result = sorted(data, reverse=True)
     8             return result
     9         else:
    10             print('youwenti')
    11     
    12     print(sorted_func(my_list,True))
    13 14 #########                         zip
    15 16     my_dict={'a':100,'b':200,'c':300}
    17     my_tuple=(400,500,'haha')
    18     
    19     def exchange_list (my_dict,my_tuple):
    20         new_dict= dict(zip(my_dict.keys(),my_tuple))
    21         new_tuple= tuple(my_dict.values())
    22         return new_dict,new_tuple
    23     
    24     new_dict,new_tuple = exchange_list (my_dict,my_tuple)
    25     print(new_tuple)
    26     print(new_dict)
    27 28 #############                     map 
    29 30     a=[1,2,3,4]
    31     def func (args):
    32         return args*100
    33     result=list(map(func,a))
    34     print(result)
    35 36 ############                     enumerate
    37 38     a=[22,66,77,99,656]
    39     for i in enumerate(a):
    40         print(i)
    41 42 ################                 filter
    43     
    44     a=[1,2,3,4]
    45     def func(args):
    46         if args>2:
    47             return  True
    48         else:
    49             return False
    50     result=list(filter(func,a))
    51     print(result)
    52

    4.5 匿名函数

    1 lambdaa,b:a**b
    2 #关键字 参数:返回值
    3 #参数可以有多个,用逗号隔开
    4 #匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
    5 #返回值和正常的函数一样可以是任意数据类型

    4.6 函数作用域

    外部不能访问函数内部变量:
    数内部能够访问函数外部变量
    函数里面不能修改函数外部变量
     1 global(全局变量):      最外层
     2 
     3 x = 123
     4 def   fun1():
     5     global x
     6     x += 1
     7     return x
     8 
     9 nonlocal(局部变量):    上一层变量
    10 
    11 def  fun2():
    12     x = 123
    13     def fun3():
    14         nonlocal x
    15         x += 1
    16         return  x
    17     return fun3()
     

    4.7嵌套函数 闭包

     

    • 嵌套函数
    1 def func_out():
    2     def func_int():
    3         print('nei ')
    4     return func_int
    5 result=func_out()
    6 result()
    • 闭包:

      闭包是函数里面嵌套函数,外层函数返回里层函数,这种情况称之为闭包。

      闭包是概念,不是某种函数类型,和递归的概念类似,就是种特殊的函数调用,闭包可以得到外层函数的局部变量,是函数内部和函数外部沟通的桥梁

     1 def fx(x):    
     2      x += 1    
     3      def fy(y):        
     4           return x*y    
     5      return fy
     6  7     def func_out(times):
     8         def func_int(num):
     9             return times*num
    10         return func_int
    11     
    12     time_5=func_out(5)
    13     print(time_5(100))
    14     
    15     time_8=func_out(8)
    16     print(time_8(100))
    17

    4.8递归和回调函数 (要有递归的终止条件)

    1.递归:

    函数自身调用自身,但是使用时类似于条件循环一样,要有递归的终止条件

    1 def factorial(num):
    2     if num ==1:
    3         return num
    4     return factorial(num-1)*num
    5 6 print(factorial(6))

    2.回调函数:

    自身是一个函数,只是被传入到另一个函数当中,供其调用

    回调函数不一定会被调用,是否调用由被传入函数的内部逻辑决定

     1     def add (x,y):
     2         return x+y
     3     def multipy(x,y):
     4         return x*y
     5     def use(func,num1,num2):
     6         return func(num1,num2)
     7     
     8     a=10
     9     b=20
    10     print(use(add,a,b))
    11
     

    4.9 肥波数列

     1 def feib(num):
     2     a=0
     3     b=1
     4     while b <num:
     5         print(b)
     6         a,b=b,a+b
     7  8 feib(10)
     9 def feib(num):
    10     if num==1 or num==2:
    11         return 1
    12     return feib(num-1)+feib(num-2)
    13 14 print(feib(5))

     

  • 相关阅读:
    js事件绑定函数
    代码练习(二维数组的定义,字符串加减,子元素的创建及绑定,排序算法)
    网页中字符串元素的相减
    JavaScript算法实现排序
    学习英语很重要的一个点
    hasattr(),getattr(),setattr()的使用
    HDU 3746 Cyclic Nacklace
    HDU 1686 Oulipo
    HDU 1711 Number Sequence
    正则表达式的常用操作符
  • 原文地址:https://www.cnblogs.com/dyf25288-/p/11675092.html
Copyright © 2011-2022 走看看