函数
定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
特性:减少重复代码、使程序变的可扩展、使程序变得易维护
#函数的定义和调用:
def 函数名(参数1,参数2,参数3...):(也可以没有参数)
执行语句
return (没有返回值,返回None)
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据。
在python中可以创建4种函数
1. 全局函数:定义在模块
2. 局部函数:嵌套于其它函数
3. lambda函数:表达式,如需多次调用
4. 方法:与特定数据类型关联的函数,并且只能与数据类型关联一起使用
必备参数:
必备参数必须以正确的顺序传入函数,调用时数量必须和声明时的一样
命名参数:(你的形参在定义的时候没有语法错误)
我们可以打乱顺序传递参数,也就是确定的传入参数值,可以跳过不传的参数值
缺省参数(默认参数):
def printme(age,name=’rose’) 设置缺省参数 一定是从右向左
如果给默认参数传递了值,那么会覆盖掉之前的默认值
不定长参数:
你可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,声明时不会具体定义
func(*arg)
# 它默认把你传递进来的多个参数处理成元组类型
func(**arg)
传递参数的时候,要以键值对的形式,传递进来的多个键值对会默认处理成字典
def func1(**arg):
print(arg)
print(type(arg))
#不定长参数,两个*接受到的参数,他会帮你处理成字典
func1(a=1,b=2,c=3)
返回值:
return 可以返回任意种类的对象,同时也能返回多个值,
def func():
return(1,2)
print(type(func()))
#看起来这里的代码好像返回两个值,实际上只有一个,一个包含2个元素的元组,它的圆括号是可选的,这里省略了
*a 可以打包接受返回值,
也可以显式的修改返回值的类型。
def func(a,b,c):
return [a,b,c]
def func(a,b,c):
return list((a,b,c))
多态:
一个操作的意义,取决于被操作对象的类型
def add(x,y):
print(x+y)
add(1,2)
add('a','b')
add([1,2,3],['a','b','c'])
作用域
a = 1 # 全局变量 : a
def func():
a = 2 #局部变量:a
print('函数内部的a是:',a)
func()
print('函数外部的a是:',a)
全局作用域 就是 这个.py脚本
局部作用域 就是函数func里面的区域
global 语句,用来在函数内部声明一个全局变量
在python中,只有类,模块,函数才会引入新的作用域
其他的代码块是不会引入新的作用域
变量优先级,局部作用域--》外层作用域--》全局作用域--》内置(int,bytearry)
函数传参:
- 值传递(传递的不可变对象)
- 引用传递(传递可变对象)
值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。
引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。
sort,sorted区别
1、sort()是可变对象(字典、列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值;
如:
2、sorted()是python的内置函数,并不是可变对象(列表、字典)的特有方法,sorted()函数需要一个参数(参数可以是列表、字典、元组、字符串),无论传递什么参数,都将返回一个以列表为容器的返回值,如果是字典将返回键的列表。
#coding:utf-8
def func():
a = [("a",123),("c","3434"),("d",343)]
a.sort() #此时list本身将被修改
result = sorted(a,key = lambda goods:goods[1])
print result #返回一个新的list
print a
func()
#[('a', 123), ('c', '3434'), ('d', 343)]
#[('a', 123), ('d', 343), ('c', '3434')]
#[('a', 123), ('c', '3434'), ('d', 343)]