##########定义函数########
# 如果不主动调用函数,函数是不会执行的
 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()
 

python 函数调用的更多相关文章

  1. python 函数调用顺序

    def foo(): print ('in the foo') bar() def bar(): print ('in the bar') foo() 1.foo函数进入内存 2.bar函数进入内存 ...

  2. python函数调用时参数传递方式

    python函数调用时参数传递方式 C/C++参数传递方式 对于C程序员来说,我们都知道C在函数调用时,采用的是值传递,即形参和实参分配不同的内存地址,在调用时将实参的值传给实参,在这种情况下,在函数 ...

  3. Python 函数调用&定义函数&函数参数

    一.函数调用 在python中内置了很多函数,我们可以直接调用 .想要调用函数首先要知道函数的名称及包含的参数,还可以通过查看python官方的文档:https://docs.python.org/3 ...

  4. python函数调用关系图(python call graph)

    由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具.(内网没装好graphviz,还没真正用 ...

  5. python函数调用顺序、高阶函数、嵌套函数、闭包详解

    一:函数调用顺序:其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用错误示范: def foo(): print 'in the foo' bar() foo() 报错: i ...

  6. Python 函数调用性能记录

    之前用 JS 写项目的时候,项目组用的组件模式,一直感觉很不错.最近用 Python 做新项目,项目结构也延续了组件模式.一直没有对函数调用的性能作了解,今天突发奇想测试了一下,写了一些测试代码 首先 ...

  7. python函数调用之自我调用与C++比较

    C++下的函数自我自我调用 第一种方法 #include <iostream> using namespace std; int rel_do(){ int a; cout<< ...

  8. Python函数调用中的值传递和引用传递问题

    这一问题O' Reilly出版的"Learning Python" 2nd Edition的 13.4 节有专门论述,对于不可变(immutabe)对象,函数参数(这里是x和y)只 ...

  9. python函数调用的四种方式 --基础重点

    第一种:参数按顺序从第一个参数往后排#标准调用 # -*- coding: UTF-8 -*- def normal_invoke(x, y): print "--normal_invoke ...

随机推荐

  1. 每天一道算法题(24)——自定义幂函数pow

    double myPower(double base, int exponent){ if(exponent==0) return 1; if(exponent==1) return base; if ...

  2. 关于mybatis和spring复合pom的异常

    java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()L ...

  3. 关于WebGIS开源解决方案的探讨(转)

    关于WebGIS开源解决方案的探讨   文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 公司目前的多数项目采 ...

  4. PLSQL语法

    Procedural Language和SQL的结合体.通过增加变量.控制语句,使我们可以写些逻辑更加复杂的数据库操作 语句框架组成 declare – 可选 声明各种变量或游标的地方. begin ...

  5. Linux,du、df统计的硬盘使用情况不一致问题

    [转]http://blog.linezing.com/?p=2136 Linux,du.df统计的硬盘使用情况不一致问题   在运维Linux服务器时,会碰到需要查看硬盘空间的情况,这时候,通常会使 ...

  6. Python 黑客 004 用Python构建一个SSH僵尸网络 01 简介

    用Python构建一个SSH僵尸网络 01 简介 一. 构建一个SSH僵尸网络的流程图: Created with Raphaël 2.1.0手动操作,实现通过SSH连接目标服务器(手动)用 Pexp ...

  7. java全栈day02

    今日内容介绍1.变量2.运算符 01变量概述 * A: 什么是变量? * a: 变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,例如水杯是容器,用来装载水:那么变量是装载什么的呢? ...

  8. 读取url接口数据

    string url = "http://localhost:8180/city-smscenter/smscenter?cmd=flowsms.queryMobileSmsList& ...

  9. webbrowser内容滚动(javascript内容无缝滚动)

    一 使用webbrowser现有方法 引用:https://blog.csdn.net/xiaokailele/article/details/48392673 public partial clas ...

  10. officeaddin开发->excel,word另存为html,xml,csv,txt设置编码格式

    在excel中设置保存之后的编码格式,需要获取到Microsoft.Office.Interop.Excel.Workbook然后设置其中的webOpetions的编码格式就可以了. workbook ...