zoukankan      html  css  js  c++  java
  • 【python】函数

      1 #1.形参和实参
      2 #对于以下例子来说:
      3 #Name作为形参充当变量名,其实际的值作为实参
      4 def Fun(Name):
      5     print(Name)
      6 Fun("HHZ")
      7 
      8 #2.函数文档
      9 #作为函数的一部分存储起来,其功能和注释一样
     10 #可以通过 __doc__ 或者 help() 来访问
     11 def Print_Fun(Name):
     12     """
     13     print ( "Name" )
     14     :param Name:
     15     :return: None
     16     """
     17     print('"'+ Name + '"' )
     18 Print_Fun("Tom")
     19 print( Print_Fun.__doc__ )
     20 help( Print_Fun )
     21 
     22 #3.默认参数
     23 def say( name = "Tom" , words = "I Love Python"):
     24     print( name + ' -> ' + words )
     25 say()
     26 say("Jerry" , "I Love C++")
     27 
     28 #4.收集参数
     29 #把参数个数设为默认参数
     30 #params称作可变参数
     31 
     32 def Test( *params , n = 0 ):
     33     print("%d个参数:"%n )
     34     for i in range(n):
     35         print( params[i] , end='
    ')
     36 Test()
     37 Test(1,2,4,n=3)
     38 a = ['a','b','c']
     39 Test( *a , n = len(a) )
     40 
     41 #5.函数返回值
     42 #通过以下例子可说明返回值为:None
     43 #Python中所有的函数都是有返回值的
     44 def Hello():
     45     print("Hello")
     46 print( Hello() )
     47 
     48 #6.函数的作用域
     49 #对于以下例子:
     50 #a)在函数Discount中局部变量t不能在函数外访问
     51 #其原理:Python在运行函数的时候,利用栈(Stack)进行存储,当执行完该函数后,函数中的所有数据都会被自动删除。
     52 #所以函数外部无法访问到函数内部的局部变量
     53 
     54 def Discount(price , rate ):
     55     t = price * rate
     56     return t
     57 old_price = 100
     58 rate = 0.8
     59 new_price = Discount(old_price,rate)
     60 print(new_price)
     61 #报错 print(t)
     62 
     63 #b)函数内能访问全局变量,但不能直接修改
     64 #python中屏蔽机制(Shadowing)保护全局变量,
     65 # 一旦函数内部试图修改全局变量,
     66 # python就会在函数内部自动创建一个名字一模一样的局部变量,
     67 # 这样结果不会影响到全局变量
     68 # 若要修改则需要在函数内加global关键字
     69 cnt = 5
     70 def myFun():
     71     global cnt
     72     cnt = 10
     73     print(cnt)
     74 myFun()
     75 print(cnt)
     76 
     77 #7.内嵌函数
     78 #python是允许在函数中定义函数
     79 #同时也受作用域的限制
     80 #即外部不能直接调用函数里的函数
     81 
     82 def fun1():
     83     def fun2():
     84         print("Fun2")
     85     print("Fun1")
     86     fun2()
     87 
     88 fun1()
     89 
     90 #8.闭包(closure)
     91 #如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,
     92 #那么内部函数被认为是闭包(closure)
     93 def funX(x):
     94     def funY(y):
     95         return x * y
     96     return funY
     97 
     98 #若内部函数向修改外部函数里的局部变量的值,使用nonlocal进行声明
     99 def funX():
    100     x = 5
    101     def funY():
    102         nonlocal x
    103         x *= x
    104         return x
    105     return funY
    106 
    107 print(funX()())
    108 
    109 #9.lambda表达式
    110 #Python允许使用lambda关键字来创建匿名函数
    111 #lambda使代码更加精简,不需要考虑命名问题,简化代码的可读性.
    112 g = lambda x : 2 * x + 1
    113 print( g(5) )
    114 
    115 g = lambda x , y : x + y
    116 print( g(1,2) )
    117 
    118 #10.BIF ->  filter() & map()
    119 #filter( function or none , iterable )
    120 #第一个参数可以是函数,第二个可迭代数据里每一个元素将作为函数的参数进行计算
    121 #返回的是filter类型
    122 
    123 #例一,筛选为真的数
    124 temp = filter( None , [ 1 , 0 , True , False ] )
    125 print( type(temp) )
    126 print( list(temp) )
    127 
    128 #例二,筛选奇数
    129 def odd(x):
    130     return x % 2
    131 temp = filter( odd , range(10) )
    132 print( list(temp) )
    133 
    134 temp = filter( lambda x : x % 2 , range(10) )
    135 print( list(temp) )
    136 
    137 #map( function or none , iterable )
    138 #第一个参数可以是函数,第二个可迭代数据里每一个元素将作为函数的参数进行计算
    139 #返回的是map类型
    140 
    141 print( list( map( lambda x : x * 2 , range(10) ) ) )
    142 
    143 #11.递归函数
    144 #限制递归函数为1e6层
    145 import sys
    146 sys.setrecursionlimit( 1000000 )
    147 
    148 #a)递归写阶乘函数
    149 def fac(n):
    150     if n == 1 :
    151         return 1
    152     else :
    153         return n * fac( n - 1 )
    154 #number = int( input("输入一个数"))
    155 number = 5
    156 print( fac(number) )
    157 
    158 #b)汉诺塔问题
    159 def hanoi( n , x , y , z ):
    160     if n == 1 :
    161         print( x , ' --> ' , z )
    162     else:
    163         hanoi( n-1 , x , z , y )
    164         print( x , ' --> ' , z )
    165         hanoi( n-1 , y , x , z )
    166 n = 3
    167 hanoi( n , 'A' , 'B' , 'C' )
    函数-全部调试代码
  • 相关阅读:
    Android开发环境配置
    还原数据库的时候显示“因为数据库正在使用,所以无法获得对数据库的独占访问权”
    Sql中当插入的字符多于8000个字符只能插入一部分,数据丢失的处理
    XML序列化的注意事项
    Js中的this和window.event.srcElement
    JS中的加密解密操作,以及对应的C#中的加密解密
    添加WebService
    CSRF(跨站点请求伪造)
    css中table-layout:fixed 属性的解说
    vs2012发布网站到IIS遇到的问题
  • 原文地址:https://www.cnblogs.com/Osea/p/12191803.html
Copyright © 2011-2022 走看看