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

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)


### 最后

> **🍅 硬核资料**:关注即可领取PPT模板、简历模板、行业经典书籍PDF。  
> **🍅 技术互助**:技术群大佬指点迷津,你的问题可能不是问题,求资源在群里喊一声。  
> **🍅 面试题库**:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。  
> **🍅 知识体系**:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)、数据仓库、Python、前端等等。




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 15
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值