机器学习基础(四)Python知识串讲---函数

机器学习基础知识笔记

1. 三元表达式

# 三元表达式 a > b ? a : b
a = 1
b = 2
print(a if a > b else b)

得到的返回值会是2。

2. 字典

# 字典结构 (key1: value1; key2: value) JSON
import json

# 定义字典
dict1 = {'name': 'wanghong', 'age': 18, 'money': 100000000000.10001}
print(dict1['name'])

# 字典的本质是dict类的对象
dict2 = dict()  # dict2 = {}
dict2['score'] = 100
print(dict2)

# 字典常用的函数, 以下三种返回都是列表形式
print(dict1.items())
print(dict1.keys())
print(dict1.values())

# 字典删除函数,pop返回的是key对应的value值
item = dict1.pop('age')
print(item)
print(dict1)

# 注意,dict健壮性不是很好,当访问dict不存在的元素时会直接报错
# 为了改善这种情况,在使用字典时使用如下格式
value = dict1.get('age')
print(value)
# 如果存在
print(dict1.get('name'))

在这里插入图片描述
get()方法就是存在key值返回value,不存在返回None。

# 字典的嵌套
dict3 = {'user': {'name': 'zhangsan', 'age': '18'}, 'hobby': {'打篮球', '游泳馆'}}
print(dict3)

3. Set

# set集合结构,与数学意义上的set一致
set1 = {1, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9}
print(set1)
set2 = {2, 3, 4, 7, 10}

# 求交集、并集、差
print(set1 & set2)
print(set1 | set2)
print(set1 - set2)

# 删除元素
set1.remove(9)  # 没有元素会报错
set1.discard(9)  # 没有元素不会报错

# 添加元素
set1.add(11)

4. 运算

import numpy as np
import math

# 求幂
x = 2**10
print(x)
print(2**0.5)
print(np.sqrt(2))
print(math.sqrt(2))  # math的性能不如numpy好,所以一般情况会使用numpy

# 整除
print(10//3)  # 省略余数

# 幂赋值运算符
a = 2
a **= 10  # == a**10
print(a)

5. 异或运算

# 位运算符
a = 12
b = 8
# 结果为4, 二进制每一位做与操作,为异或运算符,对位相异为1
res = a ^ b
print(res)

6. 逻辑运算

# 逻辑运算
a = 1
b = 2
if a > 1 or b < 3:  # ||

    pass

if a > 1 and b < 3:  # &&

    pass

# not ,布尔非,如果x为True,返回False;如果x为False,返回True

7. 身份运算符(比较内存)

  • is 是判断两个标识符是不是引用自同一个对象
  • is not 是判断两个标识符是不是引用自不同对象

8. 数据缓存池

a = 1
b = 2
print(id(a), id(b))
print(a is b)

# lisit1 和 list2是同一块内存空间
list1 = [1,2,3,4,5,6]
list2 = list1
print(id(list1), id(list2))
print(list1 is list2)

# list3 是一个新的对象
list3 = list1[:]
print(id(list1), id(list3))
print(list1 is list3)

# 数据缓存池 类似 连接池
a = 1
b = 1
print(a is b)
# a和b应该是两个不同的对象,但是a和b实际上存储在同一个内存的地址下
# Python 在创建变量时,会先在数据缓存池中去寻找是否有相同的对象
# 而不是每次遇到新变量就去开辟空间,这种机制可以节省内存和提高程序运行效率

# 对于字符串,也可以进行相同的处理
name = 'hello'
name1 = 'hello'
print(name is name1)

在这里插入图片描述

9. Python中函数

  • 求和函数实例
def calSum(a, b):  # 无数据类型约束, 执行效率差
    return a + b
    pass

result = calSum(10, 20)
print(result)

result = calSum(10.0, 10.0)
print(result)

result = calSum('hello, ', 'world!')
print(result)

result = calSum([1, 2, 3], [4, 5, 6])
print(result)

在这里插入图片描述
Python函数可以返回多个结果:

# Python函数可以返回多个结果
def calSum(a,b):
    return a + b, a - b, a * b, a / b, a % b, a // b
    pass
r1, r2, r3, r4, r5, r6 = calSum(10, 20)
print(r1, r2, r3, r4, r5, r6)

# 当使用一个变量去接收函数的结果,会返回这多个结果封装成的元组
result = calSum(10, 20)
print(result)
print(result[0])

在这里插入图片描述

  • 函数的参数
# Python函数的参数形式多样化
#  name必备参数(没有就错误),*args默认参数,age=10是带默认值的参数, **不定长参数,可以传n个,也可以传字典
def eat(name, *args, age = 10, **kw):
    print(name)
    print(args)
    print(age)
    print(kw)
    pass

eat("二哈", "3", "骨头", "哈哈", age = 10, w = 100, s = 1000, h = 'play')
#  w = 100, s = 1000, h = 'play'被封装成字典
# "3", "骨头", "哈哈" 被封装成元组

在这里插入图片描述

  • lambda 与高阶函数
# 补充lambda表达式 是一个匿名函数, 高阶函数
# 如果x>y,返回x**2,否则,返回y+1
func2 = lambda x, y : x**2 if x > y else y**2
result = func2(10, 20)
print(result)

# 只能写一行代码,多行代码无法识别
func2 = lambda name, *args, age = 10, **kw : print(name, args, age, kw)
func2("二哈", "3", "骨头", "哈哈", age = 10, w = 100, s = 1000, h = 'play')

# 高阶函数, 在Python中,函数可以作为参数传递
def func(a, b, f):  # f是其他函数
    r = f(a, b)
    return r**2
    pass
def func2(a, b):
    return a + b
    pass

result = func(10, 20, func2)
print(result)

result2 = func(10, 20, lambda  x, y : x - y)
print(result2)

在这里插入图片描述

  • filter(), 前面是过滤条件
# filter
result = filter(lambda x : x > 0, [-20, -10, 10, 20, 100])
print(list(result))

# map
result = map(lambda x : x**2, [-20, -10, 10, 20, 100])
print(list(result))

# reduce
from functools import  reduce
result = reduce(lambda value, el: value + el, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) # 累计和
print(result)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值