Python学习日志(3)函数和模块

一、函数

函数是一段可以实现某个功能的代码,将来需要使用该功能时,可以通过函数名来进行调用实现功能。

格式:

定义函数

def 函数名(..):
    代码段

调用函数

函数名(..)

二、函数的使用场景

· 面向对象编程:让对象做事(调用函数)

· 面向过程编程:可以理解为写代码的过程

·函数的好处:降低代码的冗余度;提高程序编写的灵活性

三、函数参数的用法

1、基本用法

1) 位置传参

· 形式参数:指的是函数定义时的参数

· 实际参数:指的是调用函数时实际传入的值

def fun1(a1,b1):
    print(a1,b1)

fun1(11,22)

2)关键字传参

def fun1(a1,b1):
    print(a1,b1)

fun1(b1=11,a1=22)

3)混合传参

def fun1(a,b,c):
    d = a+b+c
    print(d)

fun1(11,22,c=33)

注意:混合传参时,关键字传参必须是最后一个传入

2、定义函数时给默认值

def fun1(a,b,c=100):
    d = a+b+c
    print(d)

fun1(11,22)
fun1(11,22,33)  # 默认值会被覆盖
fun1(11,22,c=1000) # 默认值会被覆盖

3、动态参数

1)*

实际参数被出传入到函数里面的时候,会被一个元组接收

定义格式:

def 函数名(*a1):
    # a1 = (xx,xx,xx)

调用格式:

函数名(xx,xx,xx)

例子:求和

def fun1(*a1):
    sum = 0
    for i in a1:
        if type(i) == int:
            sum += i
    print(f'总和为{sum}')

fun1(11,22,33)

2)**

传键值对

def fun1(**a1):
    print(a1)

fun1(name='ni',age=18)

3)* **混合使用

def fun1(*a1,**a2):
    print(a1,a2)

fun1(1,2)
fun1(a1=11,a2=33)
fun1()
fun1(1,a1=11)

四、函数的返回值

return和print的区别

return: 作为函数中的语句结构,主要是用作函数执行结束的返回值

print(): 在控制台中输出

def sum(a,b,c):
    d = a+b+c
    print(d)
    
sum(1,2,3)

def sum(a,b,c):
    d = a+b+c
    return d

sum(1,2,3)

注:用return时,调用函数需要打印,否则没有输出值

def sum(a,b,c):
    d = a+b+c
    return d

s = sum(1,2,3)
print(s)

五、函数的种类

· 无参返回值为None

def fun1():
    print(11)

· 有参返回值为None

def fun2(a1):
    print(a1)

· 无参返回值不为None

def fun3():
    return 11

· 有参返回值不为None

def fun4(a1):
    return a1+10

六、函数的调用

· 单独调用

def fun1():
    print('hello')

fun1()

· 嵌套调用

def fun1():
    print('hello')

def fun2():
    fun1()
    print('world')

fun2()

· python中的函数也可以嵌套定义

def fun1():
    print('hello')

    def fun2():
        print('world')
    fun2()

fun1()

七、作用域

· python的py文件是一个作用域

· python中的函数内部是一个独立的作用域

1、全局变量和局部变量

· 全局变量:将变量定义在函数的外部

· 局部变量:将变量定义在函数的内部

# 全局变量
NAME = 'nihao'
AGE = 18

def fun1():
    # 局部变量
    a1 = 3
    b1 = 4
    c1 = 'hello'
    print(a1)
    print(b1)
    print(c1)

fun1()

· 局部作用域可以访问外部作用域的变量

· 函数与函数之间的作用域的变量是不可以互相访问的

· 在实际开发中,如果定义的变量是全局变量的话,请使用大写字母下划线拼接;如果定义的是局

部变量,使用小写字母下划线拼接

2、global关键字

可以修饰局部变量,将局部变量变成全局变量。

被global修饰的局部变量必须要在函数调用后才能访问

# 全局变量
name = 'nihao'
age = 18

def fun1():
    # 局部变量
    global a1
    a1 = 3
    b1 = 4
    c1 = 'hello'
    print(a1)
    print(b1)
    print(c1)
    a1 = 100

fun1()
print(a1)

八、内置函数

1、第一类函数:与数学运算相关

· abs() 求绝对值

a = abs(-10)
print(a)

· pow() 次方

a1 = pow(2,3)  # 计算2的3次方
print(a1)  # 8

· sum() 求和

list1 = [1, 2, 3, 4, 5]
res1 = sum(list1)
print(res1)

· divmod() 两个数相除得到一个商和一个余数

a1, b1 = divmod(3, 5)
print(a1)  # 商
print(b1)  # 余数

· round() 四舍五入保留小数

a1 = round(1.2367538,2)
print(a1)

2、第二类函数:与聚合相关

· min() 最小值

a1 = min([21,3,55,62,3,1])
print(a1)

· max() 最大值

a1 = max([21,3,55,62,3,1])
print(a1)

· all 判断一个序列中是否都是True

list1 = [1,2,3,0,5]
res1 = all(list1)
print(res1)  # False

· any 只要有一个是True就可以

list1 = [1,2,3,0,5]
res1 = any(list1)
print(res1)  # True

3、第三类函数:和进制相关

· 十进制 转 二进制

a1 = bin(100)
print(a1)

· 二进制 转 十进制

a1 = int('0b1100100',2)
print(a1)

· 十进制 转 八进制

a1 = oct(100)
print(a1)  # 0o144

· 八进制 转 十进制

res1 = int('0o144',8)
print(res1)

· 十进制 转 十六进制

a1 = hex(100)
print(a1) # 0x64

· 十六进制 转 十进制

res1 = int('0x64',16)
print(res1)

4、第四类函数:与字符相关

· ord() 获取对应的ASCII码值

a1 = ord('A') 
print(a1)

1、· chr() 获取ASCII码值对应的字符

a1 = chr(65)
print(a1)

5、第五类函数:与转型相关

· int()

· str()

· bool()

· list()

· tuple()

· dict()

· bytes()

6、第六类函数:与获取属性数据相关

· len()

· print()

· input()

· open()

· range()

· hash 计算一个值的哈希值(计算存储位)

· type() 查看元素类型

· callable 判断一个变量是不是函数,是否可以执行

· enumerate() 获取序列中的索引以及元素值

list1 = [11, 22, 33, 44, 55]
for index, value in enumerate(list1):
    print(f'{index}.{value}')

· sorted()  产生排序后的新列表

list1 = [11, 2, 14, 45, 16]
res1 = sorted(list1)
print(res1)  # [2, 11, 14, 16, 45]
print(list1) # [11, 2, 14, 45, 16]

八、模块

  • 自定义模块 py文件

  • 内置模块 time random ...

  • 第三方模块 requests lxml ...

1、模块的导入方式

· import xxx 直接导入大的模块

· from xxx import xxx 从大的模块中导入小的功能

· as 对导入的东西重命名

注:将来定义模块名字的时候,千万不要与内置模块或者与第三方模块重名,否则会导致功能用不了

random.py

import random

res = random.randint(1000, 9999)
print(res)

2、常用的内置模块

1)random

import random

# 获取随机的整数
res = random.randint(10, 20)  # [10,20]
print(res)

# 获取随机的小数
res2 = round(random.uniform(10, 20), 2)
print(res2)

# 从列表中随机获取一个元素
list1 = [11, 22, 33, 44, 55, 66, 77, 88]
res3 = random.choice(list1)
print(res3)

# 从列表中随机获取n个元素
list1 = [11, 22, 33, 44, 55, 66, 77, 88]
res3 = random.sample(list1,2)
print(res3)

# 随机打乱顺序
list1 = [11, 22, 33, 44, 55, 66, 77, 88]
random.shuffle(list1)
print(list1)

2)hashlib库

主要是用于数据加密 sha256(可逆) md5(不可逆)

import hashlib
info = '17354074069'

# 获取MD5加密对象
md5_objet = hashlib.md5()
# 修改数据加密编码
md5_objet.update(info.encode('UTF-8'))
# 调用方法,开始加密
res1 = md5_objet.hexdigest()
print(res1)  # 301f41f4e66dbc95168ec973e6df9747

3)json库

本质其实是一个字符串,有一些特殊格式的字符串

· 序列化:将自己的文本数据,程序中的数据转变成网络中传输的数据

import json
dict1 = {
    'name': '你好',
    'likes': ['1', '2', '3'],
    'pets': (
        {'name': '小花', 'age': 3},
        {'name': '小黄', 'age': 2}
    )
}

data = json.dumps(dict1, ensure_ascii=False)
print(data, type(data))

· 反序列化:将网络中传输的数据,转变成程序中的数据或者文本数据

import json

info = '''
{"name":"nihao","likes":["1","2","3"]}
'''

data = json.loads(info)
print(data['likes'])
print(type(data))

4)time库

· 时间戳

s1 = time.time()  # 时间戳 毫秒级别  整数部分秒级别
print(s1, type(s1))

5)datetime

· 日期相关

from datetime import datetime

# xxxx年xx月xx日  xx时xx分xx秒
s1 = datetime.now()
print(s1,type(s1))

# 日期格式化
s2 = s1.strftime("%H:%M:%S  %Y/%m/%d")
print(s2)

from datetime import datetime
# 字符串-->datetime类型 strptime()
s1 = "2024-02-22"

s1 = datetime.strptime(s1, '%Y-%m-%d')  # 格式要与字符串的格式一致
print(s1, type(s1))
print('-------------------')
# datetime类型--> 字符串
s2 = datetime.now().strftime("%H:%M:%S  %Y/%m/%d")
print(s1,type(s2))
print('-------------------')
# datetime-->时间戳
s3 = datetime.now() # datetime类型
s3 = s3.timestamp()
print(s3,type(s3))
print('-------------------')
# 时间戳-->datetime类型
res = datetime.fromtimestamp(s3)
print(res)

res = res.strftime("%Y/%m/%d %H:%M:%S")
print(res)

# 时间戳-->datetime类型-->字符串
s4 = datetime.fromtimestamp(1708605395).strftime("%Y/%m/%d %H:%M:%S")
print(s4)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值