我的python学习(三) 函数

函数定义

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值