Python 基础---函数篇

四种类型的函数

#无参数无返回
def show():
    print("hello,python!")
show()

#有参数无返回
def show(name):
    print("hello:%s"%name)
show("世界")

#无参数有返回
def return_show():
    msg = "good study day up"
    return msg
result = return_show()
print(result)

#有参数有返回
def show_msg(name):
    msg= "my name is :%s" %name
    return msg
result = show_msg("Sean")

全局变量

全局变量&局部变量
scores   =120
def show():
    # global score 表示对全局变量进行修改
    # scores = 100
    print("score:",scores)
show()

def scores_show():
    print("grade:",scores)
scores_show()

调用函数的传参方式

#按位置参数传参, 必须按照顺序传参
def show(name,age):
    print(name,age)
show("a") #这个会报错,因为缺少了age参数
show("a",20)

#使用关键字传参,前面用关键字,后面也要用关键字传参,不能使用位置参数传参
#show(name="bc",10)会报错
#show(name='bc',age3=10)还是错,age3关键字错误
#可以不按照顺序传参
show(age=10,name="pi")
show(name="bc",age=10)
# 如果混合使用,必须前面使用位置参数,后面使用关键字
show(name="wangsan",19)    #这个是错误示范

函数的不定长参数

函数的不定长参数,调用函数的时候不确定传入多少个参数,可能0个或多个
1.不定长位置参数 2.不定长关键字参数

1.不定长位置参数
def sum_num(*args):
    print(args,type(args))
sum_num(2,23,2)       #最后是封装到一个元组里面,元组类型

2.不定长关键字参数, **kwargs表示不定长关键字参数,字典类型
def show_msg(**kwargs):
    print(kwargs,type(kwargs))
show_msg(a=1,b=1)

#不定长(位置)参数函数的使用方法
def show_msg(*args):
    print(args)
    for value in args:   
        print(value)
def show(*args):
    show_msg(*args) #对元祖进行拆包
show(1,2)

#不定长(关键字)参数函数的使用方法
def show_msg(**kwargs):
    print(kwargs)
    for key,value in kwargs.items():
    	print(key,value)
def show(**kwargs):
    show_msg(**kwargs) #对字典进行拆包
show(a=1,b=2)

# 这里重点提一下,调用*args和**kwargs用于拆包,就是如果你不用,直接使用变量的话,
它就会直接把一个元组或者字典直接嵌套到一个新的元组或者字典中,而拆包就是为了获取里面的元素

函数的参数的高级使用

def show(name,age,*args,**kwargs):
    print(name,age,args,kwargs)
#不能用下面方法,因为前面用关键字,后面就不能使用位置参数
show(name="shawn",age=18,10,30)
#使用位置参数,要按照顺序,下面是正确方式
show("sean",20,1,2,3,a='apple',b='banana')

#args放前面,就只能后面全用关键字了
def show(*args,name,age,**kwargs):
    print(name,age,args,kwargs)
show(1,2,3,name='Shawn',age=18,c='cool')

#kwargs放在前面,直接报错,所以kwargs必须放最后
#关键字参数全给kwargs,后面就啥都没有了,而且位置参数也无法搞了
def show(**kwargs,name,age,*args):
    print(name,age,args,kwargs)
show(1,2,3,name='Shawn',age=18,c='cool')

#如果要使用age=18,缺省参数,就要放在args后面,如下
def show(name,*args,age=18,**kwargs)
	print(name,age,args,kwargs)
show("wilson","haha","xixi",a=1)

#如果有必选参数和缺省参数,那么缺省参数必须放到必选参数后面
def sum_num(a,b=1)  #正确例子
def sum_num(a=1,b)  #错误例子

函数的注意事项

注意事项:1.函数名不能相同 2.变量名不能和函数名相同

必须参数使用关键字传参
注意:星号 后面的参数必须使用关键字传参

def show(address,sex,*,name,age):
    print(address,sex)
    print("i am :%s  age:%d" %(name,age))
#使用位置参数传参,报错TypeError: show() takes 2 positional arguments but 4 were given
show('ss','male',"haha",56)  #错误写法
show('ss','male',name="haha",age=56)   #正确写法

函数嵌套

def show():
    def test():
        print("sub def")
        #函数内的函数只能在父函数内使用,外面用不了
    test()
show()

递归函数

在函数中调用自己本身 特点:1,传递 2,回归
阶乘 5! = 54!, 4!=43!, 3!=3*2!..

import sys
def calc_num(num):
    #当计算1的阶乘的时候不需要往下传递,需要返回结果
    if num==1:  #必须要设置结束递归的条件和返回值
        return 1
    else:
        return num*calc_num(num-1)
sys.setrecursionlimit(1100)#设置递归次数
aa = sys.getrecursionlimit()  #获取递归次数
print(aa)
 注意点:1,不能无限递归调用,默认递归调用次数1000

匿名函数

函数没有名字,使用lambda关键字定义函数就是匿名函数,匿名函数只适合做一些简单的操作,返回值不需要加上return

一般使用变量保存匿名函数
result = (lambda x,y:x+y)(1,2)
print(result)
func = lambda x,y: x*y
result = func(2,3)
print(result)


'匿名函数的应用场景,简化代码'
'如果不用匿名函数就像以下这样: 判断是否偶数,很复杂'
def is_os(num):
    if num%2 == 0:
        return True
    else:
        return False
result =is_os(2)
print(result)

"使用匿名函数的话,还能用if,这是判断是否偶数的简化版"
new_func = lambda num: True if num%2 ==0  else False
result = new_func(4)
print(result)

'对字典列表排序的时候还可以使用匿名函数'
my_list = [{'name':'zs','age':60},{'name':'qq','age':50}]
#不可以直接my_list.sort() , 因为不能对字典进行排序,但是可以对数字或者字符串
'item: 表示列表中的每一项字典数据,item["age"]:根据字典中age对应的value值排序'
'默认从小到大,reverse=True 可改变方向'
my_list.sort(key=lambda item: item['age'],reverse=True)
print(my_list)

这是对上面的一个解释,表示可以使用函数
lambda的解释

内置函数

1.内置函数就是直接可以使用的函数,比如:len,max,min,sorted,open
2.内置函数是python自己定义的函数,可以直接使用
3.len函数可以统计容器类型(字符串,列表,元祖,字典,集合)的个数

实例:

'统计字符串的个数'
resykt =len(['abc','asd'])
print(resykt)
pap = len((1,2))
print(pap)
pap = len({"name":"shawn"})
print(pap)

'max函数统计龙i去类型数据的最大值, min函数最小值'
result = max("1356")  #结果是6
print(result)
result = min("1356") #结果是1
print(result)
result = max([5,10,11])
print(result) # 结果是11

'排序'
newList = sorted([8,6,7])
print(newList)

'del函数可以删除变量'
del(newList) #或者del newList
print(newList)  #会报错

切片

根据下标的范围获取一部分数据,比如:列表,字符串可以使用切片
切片使用格式 :
my_str[起始下标:结束下标:步长]
提示,起始下标默认0,结束下标指的位置不包含在结果内,步长默认为1

my_str = 'hello'

result=my_str[1:4:1]   #取中间3个
print(result)   
result=my_str[:3]   #取前3个
print(result)   
result=my_str[2:5]   #取后3个
print(result)
result=my_str[-3:]  #使用负数下标方式取后3个
print(result)
'从倒数第三个取到最后一个,可以获取倒数后面数据,冒号后面不指定,可以取到最后一个数据'
result=my_str[:] #快速获得整个字符串
print(result)
result=my_str[-2:-5:-1] #步长是负数,代表从后往前取值
print(result)
result=my_str[3:0:-1]  #用正数下标,从后往前取值
print(result)
result=my_str[::-1] #倒着取整个字符串
print(result)
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值