过程(procedure)是简单/特殊并且没有返回值的
函数 有返回值
python 严格来说只有函数没有过程
  >>> def hello():
    ...     print(‘Hello Junjie!‘)
    ... 
  >>> temp = hello()
  Hello Junjie!
  >>> temp
  >>> print(temp)
  None
  >>> type(temp)
  <class ‘NoneType‘>
python 动态确定类型 python没有变量,只有名字
返回多个值 用一个数据类型封装多个返回的值
  >>> def back():
    ...     return [1,‘junjie‘,3.14]
    ... 
  >>> back()
  [1, ‘junjie‘, 3.14]
  >>> def back():
    ...     return 1,‘junjie‘,3.14
    ... 
  >>> back()
  (1, ‘junjie‘, 3.14)
函数变量作用域 变量的可见性
局部变量(Local Variable) 函数中定义的变量,用栈进行存储 方法结束弹栈
全局变量(Grobal Variable) 作用域整个文件
  >>> def discounts(price,rate):
  ...     final_price = price * rate
  ...     old_price = 88 #这里试图修改全局变量
  ...     print(‘修改后old_price的值是:‘, old_price)
  ...     return final_price
  ... 
  >>> old_price = float(input(‘请输入原价:‘))
  请输入原价:999
  >>> rate =float(input(‘请输入折扣‘))
  请输入折扣0.5
  >>> new_price = discounts(old_price,rate)
  修改后old_price的值是: 88
  >>> print(‘修改后old_price的值是‘,old_price) 
  修改后old_price的值是 999.0
  >>> print(‘打折后的价格是‘,new_price)
  打折后的价格是 499.5
  >>> print(‘试图打印局部变量的值‘,final_price)
  Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
  NameError: name ‘final_price‘ is not defined
全局变量 函数中修改全局变量
  >>> count = 5
  >>> def myFun():
  ...     count = 10
  ...     print(count)
  ... 
  >>> myFun()
  10
  >>> print(count)
  5
old_price = 88 #这里试图修改全局变量
python会使用屏蔽(Shadowing)去保护 全局变量
试图去修改全局变量时,python会创建一个与全局变量名字一样的变量 局部变量和全局便利存储的位置不一样
global 关键字 函数中修改全局变量
  >>> print(count)
  5
  >>> count = 5
  >>> def myFun():
  ...     global count
  ...     count = 10
  ...     print(count)
  ... 
  >>> myFun()
  10
  >>> print(count)
  10
原文:http://www.cnblogs.com/fengjunjie-w/p/7490709.html