函数定义
def printName(Name):#userName是形参,调用时会发生:Name = '小王'
print('hello ' + Name)
printName('小王')#'小明'是实参, 这里是在调用函数
#不定长参数
def myprint(userName, grade, *tuple_args, **dict_args):
print(userName, grade)
print(tuple_args)
print(dict_args)
print(type(tuple_args)) #元组
print(type(dict_args)) #字典
myprint('小王', 1,2,3,4, {'age': 20, 'weight':80, 'height': 170})
# 运行结果: 小王 1
(2, 3, 4, {'age': 20, 'weight': 80, 'height': 170})
{}
<class 'tuple'>
<class 'dict'>
#dict_args 没有接受到任何参数,因为不定长参数都被tuple_args接受了
参数传递可以默认参数,也可以使用不定长参数,实参中不使用关键字,则按照形参位置对应赋值
拆包操作
myprint('Tom', *'1,2,3,3')# *拆包 ->myprint('Tom', 1,2,3,3)
可变与不可变对象的传递
'''Python在heap中分配的对象分成两类:可变对象和不可变对象。所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变。
不可变(immutable):int、字符串(string)、float、(数值型number)、元组(tuple)
可变(mutable):字典型(dictionary)、列表型(list)'''
不可变对象在被赋新值时候,其特征没有变,变的只是创建了新对象,改变了变量的对象引用,旧的地址被回收
def ChangeIntb( b ):#不可变对象
b = 10
print('b=',b)#10
b = 2
result = ChangeIntb(b)
print('b=',b)#2?10?
在函数中b作为参数传入,而b是不可变对象,因此只在函数执行时被改变,而实际上b没有被改变
def ChangeIntb2():#不可变对象
#b=2
global b #声明b是全局变量,因此b被重新定义,下面的b赋值2失效
b = 10
print('b=',b)#10
b = 2
result = ChangeIntb2()
print('b=',b)#2?10?
函数返回值
#0.返回默认返回None (return None)
#1.可以是一个值,也可是一个表达式
#2.如果有多个值返回:return后面使用,逗号分开返回
#3.如果函数有多个返回值,调用的结果可以使用一个变量或者多个变量接收
#3.1如果是一个变量接收,得到一个元组,元组的元素就是return的多个值
#3.2如果是多个变量接收,则变量跟return的值对应
#4.返回值是必须的吗?什么时候需要返回值(不是必须的,根据需要决定是否返回)
#5.如果有返回值,必要要使用变量接收返回结果吗?(根据是否需要来决定)
#6.如果没有返回值,可不可以使用变量接收?(可以,会得到默认值的返回值None)
#7.return意味着函数结束,return后面的语句都不会再执行
匿名函数lambda
#匿名函数的使用
#1.赋值给一个变量 通过变量来调用
func = lambda a,b:a+b
res2 = func(1,2)
#匿名函数也可以作为参数传递给其他函数,例如map()
map(lambda表达式, *seqs)函数:将seqs对应元素按照func进行操作变换
#返回值是一个map对象 如果要查看元素,要转成我们熟悉的类型,比如list
这里介绍一下map(function,iterable)函数
map()是python内置的高阶函数,参数function传的是一个函数名,可以是python内置的,也可以是自定义的。
参数iterable传的是一个可以迭代的对象,例如列表,元组,字符串这样的。iterable可以多个
def mul(x):
return x*x
n=[1,2,3,4,5]
res=map(mul,n)
三元表达式
#赋值时用
list1 = [1,2,3,4,5,0]
a = 3 if len(list1) > 3 else -1
#lambda使用
a = lambda x,y: x*y if y>3 else -1 # 其中此部分实际上是赋值,定义了返回值 x*y if y>3 else -1
一些内置函数
#数字相关
abs(a) : 求取绝对值。abs(-1)
sorted(list) : 排序,返回排序后的list。
divmod(a,b): 获取商和余数。 divmod(5,2) >>> (2,1)
pow(a,b) : 获取乘方数。pow(2,3) >>> 8
round(a,b) : 获取指定位数的小数。a代表浮点数,b代表要保留的位数。round(3.1415926,2) >>> 3.14
#类型转换
bytes(str,code) : 接收一个字符串,与所要编码的格式,返回一个字节流类型。bytes('abc', 'utf-8') >>> b'abc'
iter(iterable): 返回一个可迭代的对象。 iter([1,2,3]) >>> <list_iterator object at 0x0000000003813B00>
set(iterable) : 转换为set。 set([1,4,2,4,3,5]) >>> {1,2,3,4,5} set({1:'a',2:'b',3:'c'}) >>> {1,2,3}
#功能相关
zip(*iterable) : 将iterable分组合并。返回一个zip对象。 list(zip([1,2,3],[4,5,6])) >>> [(1, 4), (2, 5), (3, 6)]
filter函数
def is_odd(n):
return n%2 == 1
lst1 = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
print(list(lst1))
reduce函数 #作用对参数迭代器中的元素进行类累积
res=reduce(lambda x,y:x+y,['b','c','d','e'],'a') #‘a’是初始值,中间是序列,第一个位置是函数
print(res)