zoukankan      html  css  js  c++  java
  • python 函数调用

    ##########定义函数########
    # 如果不主动调用函数,函数是不会执行的
     def say_hello():
         print 'hello1'
         print 'hello2'
         print 'hello3'
    # 函数的调用
     say_hello()
     def sum_2_sum():
         """对两个数字的求和"""
         num1 = 20
         num2 = 20
         result = num1 + num2
         print '%d + %d = %d' %(num1,num2,result)
     sum_2_sum()
    """
    函数参数的使用
    在函数名后面的小括号内填写 参数
    多个参数之间使用 , 分隔
    """
    # 定义函数时的变量,叫形参 形参可以任意起名字
    def sum_2_sum(num1,num2):
        """
        :param num1:
        :param num2:
        :return:
        """
        result = num1 + num2
        print '%d + %d = %d' %(num1,num2,result)
    # 在调用函数的时候
    # 在调用函数时传递得参数称为实参(真实的数据信息)
    sum_2_sum(5,20)

    ########函数形参之四大参数###########
    参数:形参 实参
    形参:位置参数 默认参数 可变参数 关键字参数
    位置参数:形参和实参个数必须保持一致
       def getInfo(name,age):
           print name,age
       getInfo(age=12,name='westos')
    默认参数:形参和实参的个数可以不一致
       def mypow(x,y=2):
           """
           求x的y次方,y的值默认为2
           :param x:
           :param y:
           :return:
           """
           print x**y
       mypow(4)
    默认形参可以改变
       mypow(4,3)
    可变参数
       def mysum(*agrs):
           """
           *args:是可变参数
            args:是元组类型数据
            args:名字可变(因为是形参 名字可变)
           :param agrs:
           :return:
           """
           print agrs
           sum = 0
           for item in agrs:
               sum += item
           print sum
    对list tuple set 解包时,只需要在变量前加 *
     nums = [1,2,3,4,66,78]
     nums1 =(1,2,3,4,5)
     nums2 = {1,2,3}
     *nums:解包
     mysum(*nums2)
    #mysum(1,2,3,4,5)
     
    关键字参数
      def getStuInfo(name,age,**kwargs):
          """
          **kwargs:是一个字典;可以传递任意多的key-value对
          :param name:
          :param age:
          :param kwargs:
          :return:
          """
          print name,age
          print kwargs
       getStuInfo('westos',18,hobbies=['code','running'],gender ='female')
    ########函数变量的作用域###########
    局部变量:在函数内部定义的普通变量,只在函数内部作用,函数执行结束
    变量会自动删除
    a = 1
    print 'outside:',id(a)
    def fun():
        global a # 声明a为全局变量
        a = 5
        print 'inside:',id(a)
    fun()
    print a
    print id(a)
    ########函数的返回值########
    """
    返回值:函数运算的结果,还需要进一步操作时,给一个返回值
    return用来返回函数执行结果的,如果没有返回值,默认为None
    python可以间接返回多个值(返回了一个元组)
    一旦遇到return,函数执行结束,后面的代码不会执行
    """

    def mypow(x, y=2):
        return x ** y, x + y
        print 'hello'
        # pass
     对元组进行解包
    a,b = mypow(3)
    print a,b
    #######引用#######
    def test(num):
        print '在函数内部%d对应的内存地址是%d' %(num,id(num))
        result = 'hello'
        print '函数要返回的数据的内存地址是 %d' %id(result)
        return result
    a = 10
    print 'a变量保存数据的内存地址是%d' %id(a)
    r = test(a)
    print '%s 的内存地址是 %d' %(r,id(r))
    ########列表生成式#######
     1.
     s = '51 5000 10000'
     li = [ ]
     for item in s.split():
         li.append(int(item))
     k,a,b = li
     k, a, b = [int(item) for item in s.split()]
     print k,a,b
     2.生成一个列表,列表元素分别为[1**2,2**2,3**2,4**2...n**2]
     li = []
     for i in range(1, 8):
         li.append(i ** 2)
     print li
     print [i ** 2 for i in range(1, 8)]
     """
     [experssion for i in 序列 if...]
     """
     print [i ** 2 for i in range(1, 8) if i % 2 == 0]
    ##########字典生成式#########
    1.假设有20个学生,学分在60~100之间,筛选出成绩在90分以上的学生
    import random
     stuInfo = {}
     for i in range(20):
         name = 'westos' + str(i)
         score = random.randint(60,100)
         stuInfo[name] = score
     #     stuInfo['westos'+str(i)] = random.randint(60,100)
     hightscore = {}
     for name,score in stuInfo.items():
         if score > 90:
             hightscore[name] = score
     print hightscore
    stuInfo = {'westos'+ str(i):random.randint(60,100) for i in range(20)}
    print {name:score for name,score in stuInfo.items() if score >90}

     2.将字典中的key值和value值调换
      d = {'a':'apple','b':'bob','c':'cat'}
    #  print {v:k for k,v in d.items()}
      print {k:k.upper()for k,v in d.items()}
    # 3.大小写合并,key值最终全部为小写
      d1 = {'A':10,'b':3,'a':5,'B':8,'d':1}
      print {k.lower():d1.get(k.upper(),0)+d1.get(k.lower(),0)for k,v in d1.items
    ###########函数装饰器######
    "在不改变原函数的基础上,给函数增加功能"
    把一个函数当作参数,返回一个替代版的函数
    本质上:返回函数的函数
    def desc(fun):
        def add_info():
            print '快乐'
            fun()
            print '欢迎'
        return add_info
    # 语法糖
    @desc
    def login():
        # print '快乐...'
        print 'login....'
        # print '欢迎...'
    @desc # login = desc(login)
    def logout():
        print 'logout....'
    @desc
    def savemoney():
        print '存钱...'
    @desc
    def transferMoney():
        print '转账....'
        # def ..
    login()
    logout()
    savemoney()
    transferMoney()
     
  • 相关阅读:
    最小覆盖圆算法
    hdu2202(最大三角形 )凸包
    hdu1392(凸包)
    hdu1348
    凸包模板
    凸包算法
    DataTable和List互转
    没有功能需求设计文档?对不起,拒绝开发!【分享】
    [分享]浅谈分布式数据库
    微信公众号授权,支付,退款总结【shoucang】
  • 原文地址:https://www.cnblogs.com/zhengyipengyou/p/9573570.html
Copyright © 2011-2022 走看看