【Python从入门到实战100天】06. 函数和模块的使用(保姆级图文+实现代码)


欢迎关注 『Python从入门到实战100天』 系列,持续更新中
欢迎关注 『Python从入门到实战100天』 系列,持续更新中

1. 计算组合数C(7,3)

先上组合公式
在这里插入图片描述

# 将求阶乘的功能封装成一个函数
def factorial(n):
    result = 1
    for num in range(1, n + 1):
        result *= num
    return result


print(factorial(7) // factorial(3) // factorial(4))#// 表示整除

在这里插入图片描述


2. 求最大公约数和最小公倍数

辗转相除法
辗转相除法:辗转相除法是求两个自然数的最大公约数的一种方法,也叫欧几里德算法。
例如,求(319,377):
∵ 319÷377=0(余319)
∴(319,377)=(377,319);
∵ 377÷319=1(余58)
∴(377,319)=(319,58);
∵ 319÷58=5(余29)
∴ (319,58)=(58,29);
∵ 58÷29=2(余0)
∴ (58,29)= 29;
∴ (319,377)=29。
可以写成右边的格式。
用辗转相除法求几个数的最大公约数,可以先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是所有这些数的最大公约数。(来自百度百科)

def gcd(x, y):
    if x > y:
        (x, y) = (y, x)
    for factor in range(x, 1, -1):
        if x % factor == 0 and y % factor == 0:
            return factor
    return 1


def lcm(x, y):
    return x * y // gcd(x, y)


print(gcd(15, 27))
print(lcm(15, 27))

在这里插入图片描述


3. Python的内置函数

  • 数学相关: abs / divmod / pow / round / min / max / sum
  • 序列相关: len / range / next / filter / map / sorted / slice / reversed
  • 类型转换: chr / ord / str / bool / int / float / complex / bin / oct / hex
  • 数据结构: dict / list / set / tuple
  • 其他函数: all / any / id / input / open / print / type
#返回长度为6的内容
def myfilter(mystr):
    return len(mystr) == 6


# help()
print(chr(0x53d1),chr(0x73b0),chr(0x4f60),chr(0x8d70),chr(0x8fdc))
print(hex(ord('发')),hex(ord('现')))
print(abs(-3.1415))#绝对值
print(round(-3.1415,1))#四舍五入保留1位
print(pow(3.1415, 5))#5次方
fruits = ['orange', 'peach', 'durian', 'watermelon']
print(fruits[slice(1, 3)])#得到 1 2 位置的水果
fruits2 = list(filter(myfilter, fruits))#filter是条件过滤,myfilter是一种规则,把fruits列表中长度为6的水果选中
print(fruits)
print(fruits2)#字符串长度为6的水果

在这里插入图片描述


4. Python常用模块

  • 运行时服务相关模块: copy / pickle / sys / …
  • 数学相关模块: decimal / math / random / …
  • 字符串处理模块: codecs / re / …
  • 文件处理相关模块: shutil / gzip / …
  • 操作系统服务相关模块: datetime / os / time / logging / io / …
  • 进程和线程相关模块: multiprocessing / threading / queue
  • 网络应用相关模块: ftplib / http / smtplib / urllib / …
  • Web编程相关模块: cgi / webbrowser
  • 数据处理和编码模块: base64 / csv / html.parser / json / xml / …
import time
import shutil
import os

seconds = time.time()
print(seconds)#打印时间戳
localtime = time.localtime(seconds)
print(localtime)#time.struct_time(tm_year=2022, tm_mon=3, tm_mday=3, tm_hour=9, tm_min=21, tm_sec=24, tm_wday=3, tm_yday=62, tm_isdst=0)

print("tm_year",localtime.tm_year)
print("tm_mon",localtime.tm_mon)
print("tm_mday",localtime.tm_mday)
asctime = time.asctime(localtime)
print(asctime)#Thu Mar  3 09:22:13 2022
strtime = time.strftime('%Y-%m-%d %H:%M:%S', localtime)
print(strtime)#格式化输出时间2022-03-03 09:22:32
mydate = time.strptime('2018-1-1', '%Y-%m-%d')
print(mydate)#打印指定时间 time.struct_time(tm_year=2018, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)

shutil.copy('hello.py', 'first.py')#用hello.py的内容替换掉first.py的内容 注意这里的2个文件要在同一目录下,或者你自己修改目录
#下面的四行初学者不太可能用到···
# os.system('ls -l')#打印当前目录内容
# # os.chdir('/Users/Hao')#转到某个路径的文件夹
# os.system('ls -l')#打印当前目录内容
# os.mkdir('test')#创建一个名为test的文件夹

在这里插入图片描述
随便新建2个py文件
在这里插入图片描述


5. 函数的参数

  • 位置参数
  • 可变参数
  • 关键字参数
  • 命名关键字参数

推荐这篇文章有更多具体的介绍
一篇文章学会def定义函数的可选参数,默认参数,有默认值的可选参数(保姆级注释)

# 参数默认值
def f1(a, b=5, c=10):
    return a + b * 2 + c * 3


print(f1(1, 2, 3))
print(f1(100, 200))
print(f1(100))
print(f1(c=2, b=3, a=1))


# 可变参数,可以输入任意数量参数
def f2(*args):
    sum = 0
    for num in args:
        sum += num
    return sum


print(f2(1, 2, 3))
print(f2(1, 2, 3, 4, 5))
print(f2())


# 关键字参数
def f3(**kw):
    if 'name' in kw:
        print('欢迎你%s!' % kw['name'])
    elif 'tel' in kw:
        print('你的联系电话是: %s!' % kw['tel'])
    else:
        print('没找到你的个人信息!')


param = {'name': '南黎', 'age': 38}
f3(**param)
f3(name='南黎', age=38, tel='12345678999')#name正确,不再执行elif的tel输出语句
f3(user='南黎', age=38, tel='12345678999')#只有tel正确
f3(user='南黎', age=38, mobile='12345678999')#name和tel都没有

在这里插入图片描述


6. 函数的作用域

# 局部作用域
def foo1():
    a = 5


foo1()
# print(a)  # NameError

# 全局作用域
b = 10


def foo2():
    print("foo2",b)


foo2()#打印10


def foo3():
    b = 100     # 局部变量
    print("foo3内部",b)


foo3()
print("foo3外部",b)


def foo4():
    global b
    b = 200     # 全局变量
    print("foo4内部",b)


foo4()
print("foo4外部",b)

在这里插入图片描述


总结

大家喜欢的话,给个👍,点个关注!给大家分享更多有趣好玩的Python学习笔记!

本专栏系列内容基于开源项目jackfrued-Python-100-Days

欢迎关注 『Python从入门到实战100天』 系列,持续更新中
欢迎关注 『Python从入门到实战100天』 系列,持续更新中

【更多内容敬请期待】


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值