[Python公开课]零基础玩转Python基础篇----第六节:Python中的函数

简介: [Python公开课]零基础玩转Python基础篇----第六节:Python中的函数

网络异常,图片无法展示
|

📢📢📢📣📣📣 🌻🌻🌻Hello大家好,我叫是Dream呀,一个有趣的Python博主,多多关照😜😜😜 🏅🏅🏅CSDN Python领域优质创作者,大二在读,欢迎大家找我合作学习(文末有VX 想进学习交流群or学习资料 欢迎+++) 💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀 💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺 🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈 🌟🌟🌟✨✨✨

前言: 📢📢📢【Python公开课】系列课程是针对Python入门&进阶打造的一全套课程,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘 【报团取暖】🆘🆘🆘 🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信或者在文末添加我的VX,我会拉你进学习交流群,我们一起交流学习,报团打卡赶快加入我们吧!🍻🍻🍻

@TOC

1️⃣ 学习目标----提前知💞💞💞

☀️☀️☀️一个崇高的目标,只要不渝地追求,就会成为壮举!

  • 掌握什么是函数的定义调用
  • 了解函数的参数、函数的返回值、函数的嵌套
  • 学习递归函数、匿名函数、日期时间函数和随机数函数

2️⃣ 学习任务----我能行🍻🍻🍻

🏅🏅🏅穷且益坚,不坠青云之志!

🌻 01 什么是函数

什么是函数?

函数是组织好的,可重复使用的,用来实现单一或相关联功能的代码段,它能够提高应用的模块性和代码的重复利用率。

print(“  *  ”)
print(“ *** ”)
print("*****")

如果在一个程序的不同地方需要输出这个图形,每次使用print语言输出的做法显然不可取。

🌻 02 函数的定义和调用

Python定义函数使用def关键字,格式如下:

def 函数名(参数列表):
    函数体

这是一个自定义的函数:

def printInfo():
    print('------------------------------------')
    print('         生命苦短,我用Python            ')
    print('------------------------------------')

定义了函数之后,想要让这些代码能够执行,需要调用函数。通过“函数名()” 即可完成调用。

# 调用刚才定义的函数
printInfo()

🌻 03 函数的参数

默认参数

调用函数时,如果没有传递参数,则会使用默认参数

def printinfo( name, age = 35 ):
print(“Name:”, name)
print(“Age:”, age)
printinfo(name="miki" )
printinfo(age=9,name="miki" )

带有默认值的参数一定要位于参数列表的最后面。否则程序会报错。

不定长参数

如果希望定义的函数,可以计算任何两个数和,我们在定义函数的时候,让函数接收数据,这就是函数的参数

def add2num(a, b):
    c = a+b
   print(c)

a和b就是函数的参数,调用的时候,可以传入任何两个数。 有时可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数,声明时不会命名。

def functionname([formal_args,] *args, **kwargs):
       "函数_文档字符串"
    function_suite
       return [expression]
  • 加了星号(*)的变量args会存放所有未命名的变量参数,args为元组;
  • 加**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。

下面代码的运行结果是怎样的呢?

def test(a,b,*args):
     print(a)
     print(b)
     print(args)
test(11,22)
def test(a,b,*args):         
  print(a)         
  print(b)         
  print(args) 
test(11,22,33,44,55,66,77,88,99)

🌻 04 函数的返回值

函数的返回值是使用return语句来完成的。

def add2num(a, b):
    c = a+b
    return c

函数add2num中包含return,意味着这个函数有一个返回值,其返回值就是a和b相加的结果。

🌻 05 函数的四种类型

根据函数的参数和返回值,函数可以分为四种类型:

  1. 无参数,无返回值的函数
  2. 无参数,有返回值的函数
  3. 有参数,无返回值的函数
  4. 有参数,有返回值的函数

1.无参数,无返回值的函数

def printMenu():
        print('--------------------------')
        print('      xx涮涮锅 点菜系统')
        print('  1.  羊肉涮涮锅')
        print('  2.  牛肉涮涮锅')
        print('  3.  猪肉涮涮锅')
        print('--------------------------')
 printMenu()

2.无参数,有返回值的函数

# 获取温度
def getTemperature():
    #这里是获取温度的一些处理过程
    #为了简单起见,先模拟返回一个数据
    return 24
temperature = getTemperature()
print('当前的温度为:',temperature)

3.有参数,无返回值的函数

def test(num1,num2):
       result=num1+num2
       print('计算结果为:%d'%result)

4.有参数,有返回值的函数

def calculateNum(num):
        result = 0
     i = 1
        while i<=num:
            result = result + i
       i+=1
        return result
    result = calculateNum(100)
    print('1~100的累积和为:', result)

🌻 06 函数的嵌套调用

实例:

网络异常,图片无法展示
|

🌻 07 变量的作用域

作用域

  • 为了避免变量的名称发生冲突,所以Python引入了命名空间的概念。
  • 命名空间指的是名称到对象的映射,类似于字典,键名是变量的名字,值是变量的值。

命名空间是相互独立存在的,而且它们被安排在某个特定的层次,把这些层次结构组合起来就是作用域

  • 本地作用域
  • 函数嵌套作用域
  • 文件作用域
  • 内置作用域
    网络异常,图片无法展示
    |

局部变量

  • 所谓局部变量,就是在函数内部定义的变量。
  • 局部变量的作用域是函数内部,意味着它只在定义它的函数中有效,一旦函数结束就会消失。

全局变量

  • 定义在函数外的拥有全局作用域
  • 全局变量可以在整个程序范围内访问。
  • 如果出现全局变量和局部变量名字相同的情况,则在函数中访问的是局部变量

🌻 08 递归函数和匿名函数

一个函数的内部可以调用其他函数。但是,如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。 使用递归,实现阶乘 n! = 1 * 2 * 3 * ... * n的计算。

网络异常,图片无法展示
|

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)
Fact(5)
# 结果:120
# 过程:5*4*3*2*1

匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要声明匿名函数,则需要使用lambda关键字,匿名函数的声明格式如下所示:

lambda [arg1 [,arg2,.....argn]]:expression

匿名函数示例代码:

sum = lambda arg1, arg2: arg1 + arg2
print(“运行结果:", sum( 10, 20 ))
print("运行结果:", sum( 20, 20 ))

注意: 使用Lambda声明的匿名函数能接收任何数量的参数,但只能返回一个表达式的值。匿名函数不能直接调用print,因为lambda需要一个表达式。

🌻 09 日期时间函数

时间函数

在Python中,通常有如下几种方式表示时间: (1)时间戳; 通常来讲,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。

import time;  # 引入time模块
ticks = time.time()
print("当前时间戳为:", ticks)
### 当前时间戳为: 1642048647.1326923

(2)格式化的时间字符串; 我们可以使用time模块的strftime方法来格式化日期。

import time
# 格式化成2016-03-20 11:45:39形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
# 2022-01-13 12:38:08

(3)时间元组(struct_time)。 返回struct_time的函数主要有gmtime()、localtime()和strptime(),struct_time元组。

日历函数

1.calendar.calendar(year,w=2,l=1,c=6) 返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。

import calendar
print(calendar. firstweekday())
print(calendar.isleap(2018))
print(calendar.calendar(2021,w=1,l=1,c=6))

然后就可以得到我们的日期表了,是不是非常的nice:

网络异常,图片无法展示
|
2. 返回当前每周起始日期的设置。默认情况下,首次载入caendar模块时返回0,即星期一。

calendar. firstweekday()

3. 如果是闰年返回True,否则为false。

calendar.isleap(year)

4. 返回在Y1,Y2两年之间的闰年总数。

calendar.leapdays(y1,y2)

5. 返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。

print(calendar.month(2021,2,w=2,l=1))

网络异常,图片无法展示
|
6. 返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。

calendar.monthcalendar(year,month)

网络异常,图片无法展示
|
7. 返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。

calendar.monthrange(year,month)

8.calendar.prcal(year,w=2,l=1,c=6) 相当于print(calendar.calendar(year,w,l,c))

🌻 10 随机数函数

1.random.random() 用于生成一个0到1的随机符点数: 0 <= n < 1.0。

import random# 生成第一个随机数
print("random():", random.random())# 生成第二个随机数 
print("random():", random.random())

2.random.uniform(a,b) 返回a,b之间的随机浮点数,范围[a,b]或[a,b]取决 于四舍五入,a不一定要比b小。 3.random.randint(a,b) 返回a,b之间的整数,范围[a,b],注意:传入参数必须是整数,a一定要比b小。 4.random.randrang([start], stop[, step]) 返回有个区间内的整数,可以设置step。只能传入整数,random.randrange(10, 100, 2), 结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。 5.random.choice(sequence) 从sequence(序列,是有序类型的)中随机获取一个元素,列表、元组、字符串都属于sequence。

random.randrange(10,100,2) 
#结果等效于
random.choice(range(10,100,2)

6.random.shuffle(x[,random]) 用于将列表中的元素打乱顺序,俗称为洗牌。

p = ["Python","is", "powerful","simple”]  
random.shuffle(p)

7.random.sample(sequence,k) 从指定序列中随机获取k个元素作为一个片段返回,

sample函数不会修改原有序列

list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  
slice = random.sample(list, 5) 
print(slice) 
print(list)
# [6, 9, 3, 1, 2]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

3️⃣ 本章小结----知难易🏆🏆🏆

😊😊😊人生是跋涉,也是旅行;是等待,也是重逢;是探险,也是寻宝;是眼泪,也是歌声!

本章主要针对函数进行了讲解,包括函数的定义调用、函数的参数、函数的返回值、函数的嵌套、递归函数、匿名函数、日期时间函数和随机数函数。函数作为关联功能的代码段,可以很好的提高应用的模块性,希望读者能用好这些函数,并学会查询相关的函数手册。

4️⃣ 小试牛刀----习题讲解🌈🌈🌈

🏃 🏃 🏃本期问题

✍第一题 输入某年某月某日,判断这一天是这一年的第几天?

# -*-coding:utf-8 -*-
# @Author:到点了,心疼徐哥哥
# 奥利给干!!!
# 输入某年某月某日,判断这一天是这一年的第几天?
year = int(input('请输入哪一年:'))
month = int(input('第几个月:'))
day = int(input('几号:'))
k = 0
a = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
b = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if (year%400 == 0) or (year%4 == 0 and year%100 != 0):
    for i in range(1,month):
        j = b[i-1]
        k+=j
else:
    for i in range(1,month):
        j = a[i-1]
        k+=j
print(k+day)

✍第二题 斐波那契数列

# -*-coding:utf-8 -*-
# @Author:到点了,心疼徐哥哥
# 奥利给干!!!
# 斐波那契数列
# 斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……。
def feibonaji(n):
    if n==1:
        return 0
    elif n==2:
        return 1
    else:
        return feibonaji(n-1)+feibonaji(n-2)
print(feibonaji(8))

✍第三题 完全平方数

# -*-coding:utf-8 -*-
# @Author:到点了,心疼徐哥哥
# 奥利给干!!!
# 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
import math
n = 0
for n in range(-100, 10000):
    n+=1
    x=int(math.sqrt(n + 100))
    y=int(math.sqrt(n+100+168))
    if(x**2==n+100 and y**2==n+100+168):
        print(n)
目录
相关文章
|
2月前
|
Python
【python从入门到精通】-- 第五战:函数大总结
【python从入门到精通】-- 第五战:函数大总结
76 0
|
18天前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
123 67
|
12天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
38 18
|
3天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
30 8
|
13天前
|
Python
Python中的函数
Python中的函数
28 8
|
20天前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####
|
27天前
|
Python
Python中的`range`函数与负增长
在Python中,`range`函数用于生成整数序列,支持正向和负向增长。本文详细介绍了如何使用`range`生成负增长的整数序列,并提供了多个实际应用示例,如反向遍历列表、生成倒计时和计算递减等差数列的和。通过这些示例,读者可以更好地掌握`range`函数的使用方法。
40 5
|
2月前
|
Python
Python之函数详解
【10月更文挑战第12天】
Python之函数详解
|
2月前
|
存储 数据安全/隐私保护 索引
|
1月前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。