23、函数
# 函数代码块以def关键词开头,后接函数标识符名称和括号()
# 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
# 函数的第一行语句可以选择性地使用文档字符串-用于存放函数学明。
# 函数内容以冒号起始,并且缩进。
# return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。
# def functioname(parameters):
# "函数_文档字符串"
# function_suite
# return [expression]
# 可更改(mutable)与不可更改(immutable)对象
'''
# 在python中,strings,tuples,和numbers是不可更改的对象,而list,dict等则是可以修改的对象。
` 不可变类型: 变量赋值 a = 5 后再赋值 a = 10,这里实际是新生成一个int值对象10,再让a指向她,而5被丢弃,不是改变a的值,相当于新生成了a.
` 可变类型:变量赋值la=[1,2,3,4]后再赋值 la[2]=5 则是将list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。
'''
'''
#python 函数的参数传递:
不可变类型:类似c++的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身,比如在fun(a)内部分修改a的值,只是修改另一个复制的对象,不会影响a本身。
可变类型:类似c++的值传递,如 列表,字典。如fun(la),则是将la真正的传过去,修改后fun外部的la也会受影响
'''
#参数:调用函数时可使用的正式参数类型:
# 必备参数
# 关键字参数
# 默认参数
# 不定长参数
#
# --不定期参数(一个函数能处理比当初声明时更多的参数。这些参数叫做不定期参数)
# def functionname([formal_args,]*var_args_tuple):
# "函数_文档字符串"
# function_suite
# return[expressiom]
# 匿名函数
# python 使用lambda 来创建匿名函数
# lambda 只是一个表达式,函数体比def简单很多。
# lambda 的主体是一个表达式,而不是一个代码块。仅仅能在lambda
# lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
# 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
# return 语句[表达式]退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None.之前的例子都没有示范如何返回数值。
# 变量作用域(# 全局变量 # 局部变量)
# 一个程序的所有的变量并不是在那个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。
# 变量的作用域决定了在哪一部分程序你可以访问那个特定的变量名称。两种最基本的变量作用域如下: