Python3 入门专栏
http://blog.csdn.net/column/details/19679.html
Python 函数
函数定义和调用
python 中使用 def 关键字来定义关键,语法如下:
def 函数名(参数列表):
函数体
return 返回结果
示例:
# 函数定义:有返回结果
def my_sum(num1, num2):
return num1 + num2
# 函数定义:无返回结果,函数中可以使用 return 强制退出方法体
def sum_print(num1, num2):
sum_num = my_sum(num1, num2)
print(num1, "+", num2, "=", sum_num)
# return
# 函数输出
sum_print(12, 2333) # 输出:12+2333=2345
sum_print(num1=12, num2=23333)
函数参数
在 python 中,类型属于对象,变量是没有类型的;
Numbers,s
tring, tuple, set 是不可更改的对象,而 list,dict 是可以修改的对象;
不可变类型 & 可变类型
- 不可变类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a;
- 可变类型:变量赋值 lista=[1,2,3,4] 后再赋值 lista[2]=5 则是将 lista 的第3个元素值更改,本身 lista 没有更改,只是其内部的一部分值被修改了;
- 不可变类型:类似 Java 的值传递,函数获取的形参是实参的实际值拷贝;
- 可变类型:类似 Java 的引用传递,函数获取的形参是实参的内存地址引用;
实际上 python 中一切都是对象,不是 Java 或 C++ 中严格的值传递和引用传递,只能说是传递了可变对象和不可变对象;
默认参数值
python 函数的入参可以设置默认参数值,如下:
def info(name, age=18): # age 默认值为18
print("name:", name)
print("age:", age)
info("assad")
不定长参数
python 参数入参也支持不定长参数,在入参中使用 * 标记一个变量名,该形参会储存所有未命名的形参,并将其储存在一个元组中;
def print_info(info_id, *args): # 其中 *params 用于接收可变长度入参
print("id:", info_id, end=" -> ")
for arg in args:
print(arg, end=" ")
print()
return
print_info(2333, 1, 2, 3, 4, 5, 6, 7, 8) # 输出:id:2333 -> 1 2 3 4 5 6 7 8
变量作用域
python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的;
python 变量的作用域包括4种:
- Local:局部作用域
- Enclosing:闭包函数外的函数中
- Global:全局作用域
- Built-in:内建作用域
一个命名相同的变量,可以同时存在在这4个作用域中,python 代码执行时会按照,Local -> Enclosing ->Global ->Build-in 这样的顺序查找该变量;
局部变量和全局变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域;
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中;
var = 0 # var 在这里是全局变量
def foo():
var = 20 # var 在这里是局部变量.
print ("local var = ", var)
return
foo()
print("global var = ", var)
# 输出:
# local var = 20
# global var = 0
global 和 nonlocal关键字
当内部作用域想修改外部全局作用域的变量时,可以使用 global 将一个变量标记为全局变量:
var = 0
def foo():
global var # 将 var 标记为全局变量
var = 20
print("local var = ", var)
return
foo()
print("global var = ", var)
# 输出:
# local var = 20
# global var = 20
如果要修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量则需要 nonlocal 关键字:
def outer():
var = 0
def inner():
nonlocal var
var = 20
print("inner var = ", var)
inner()
print("outer var = ", var)
outer()
# 输出:
# inner var = 20
# outer var = 20
匿名函数
python 使用 lambda 来创建匿名函数,语法如下:
lambda <参数列表>: <返回表达式>
示例如下:
sum = lambda arg1, arg2: arg1 + arg2
print(sum(20, 10))
print(sum(40, 50))