函数的理解和定义
# print('hello')
# print(min(2,4))
# print(min())
"""
范例:
def print(self, *args, sep=' ', end='\n', file=None):
def min(*args, key=None):def 函数名():函数体"""
# li = [1,2,3]
# li.copy()# 定义一个函数
# 在没有调用函数的情况下,函数是不会被执行的
# def hello():
#     print('hello')
#     print('hello')
#
# # 调用函数
# # hello()
#
# # 函数里面嵌套函数
# def fentiao():
#     print('is fentiao....')
#     def westos():
#         print('westos')
#     #westos()
#
# fentiao()def func1(a):# name = 'westos'# 定义函数时的变量称为形式参数,变量名可以任意起print('hello %s' %(a))# 调用函数时的参数称为实参,该参数必须是实际存在的
func1(12)
func1('linux')
func1('python')

# *** 练习1:
# 编写一个名为collatz()的函数,它有一个名为number的参数。
#   如果参数是偶数,那么collatz()就打印出number//2
#   如果number是奇数,collatz()就打印3*number+1
"""

def fun():print(fun.x)fun()# # 动态添加
fun.x = 3
fun()# 动态删除
del fun.x
fun().

函数的返回值:
# 函数调用时一般有返回值,没有定义返回值的时候,python中默认返回None
# def hello():
#     print('hello')
#
# res = hello()
# print(res)def hello():# return 返回的表达式或者变量return 'hello'res = hello()
print(res)

return应用随机生成20个学生的成绩判断这个20个学生的等级
import randomdef level(num):if 90 <= num <= 100:return 'A'elif 80 <= num < 90:return 'B'elif 60 <= num < 80:return 'C'else:return 'D'def num():for i in range(20):num = random.randint(1, 100)print('成绩为%s,等级为%s' % (num, level(num)))
num()

多个返回值
def fun(a):# 接收一个列表,求这个列表的最大值,平均值,最小值max_num = max(a)min_num = min(a)avg_num = sum(a)/len(a)# python函数中,只能返回一个值# 如果非要返回多个值,会把返回的值封装为一个元组数据类型return max_num,min_num,avg_num
variables = fun([2,4,5,7,8,9,43,56,8,])
print(variables,type(variables))

函数行参之四大参数类型:
"""
参数:形参 实参
形参的分类:位置参数 默认参数 可变参数 关键字参数
"""# 位置参数:形参和实参必须保持一致
def getInfo(name, age):  # 按照位置传递参数print(name, age)
getInfo(age=18, name='name')# 默认参数:形参和实参可以不一致
def mypow(x,y=2):"""求x的y次方:param x::param y::return:"""print(x**y)
mypow(4)
mypow(4,3)# 可变参数
def mySum(*args):"""需求:用户可以传递任意的值,计算数值的和*args:是一个可变参数args:是元组数据类型:param args::return:"""#print(args)sum = 0for item in args:sum += itemprint(sum)
mySum(1,2,3,4,5,6,7,8)# 关键字参数
def getStuInfo(name,age,**kwargs):print(name,age)print(kwargs)getStuInfo('westos',11,hobbies=['code','running'],gender='female')# nums = [1,2,3,4,5,6]
# nums1 = (2,5,6,7,9,10)
# nums2 ={1,2,3,4,5,6,7,8}
# mySum(*nums2)# score = (12,23,56,78,90)
# minscore,*middlescore,maxscore = score
# print(*middlescore)
# print(middlescore)# 如果要对字典进行解包,一个星号:获取key值
d = dict(a=1,b=2)
print(*d)
getStuInfo('westos',11,**d)

位置参数:

默认参数:

可变参数:

关键字参数:

如果要对字典进行解包,一个星号:获取key值

函数练习
"""题目需求:对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:f(13) = 1**2 + 3**2 = 10f(207) = 2**2 + 0**2 + 7**2 = 53下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,且k*f(n)=n
输入:第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:输出对应的答案;
范例:输入: 51 5000 10000输出: 3# def f(n):
#     n = str(n)
#     sum = 0
#     for i in n:
#         sum +=int(i)**2
#     return sum
# def panduan(k,n):
#     if k * f(n)==n:
#         return True
#     else:
#         return False
# def main(k,a,b):
#     count = 0
#     for i in range(a ,b+1):
#         if panduan(k,i):
#             count+=1
#     print(count)
# main(51,5000,10000)
"""

函数的作用域
"""作用域局部作用域全局作用域
"""
# 全局作用域:作用于整个程序
# num = 10
# print('out fun: id=',id(num))
#
# def fun():
#     #局部作用域,在函数运行时生效,函数运行结束则释放
#     num =2
#     print('in fun:id=',id(num))
#     print('in fun:num = %s' %(num))
#
#
# fun()
# print('out fun: num=%s' %(num))num = 10def fun():# 通过global关键字声明局部变量为全局变量# 函数执行完毕,变量依然生效global numnum = 2
fun()print(num)

全局作用域

局部作用域

 1.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。
- 输入:3- 输出:105168421

参数检测:
判断输入的是否是整形或者浮点型或者字符串型def add(x, y):if isinstance(x, (int, float,str)) and isinstance(y, (int, float,str)):return x + yelse:print('Error:')res = add(2.5,2)
print(res)

"""编写函数,计算字符串匹配的准确率
"""
def Rate(orgin,userInput):if not (isinstance(orgin,str) and isinstance(userInput,str)):print('The tow parameters must be string')returnif len(orgin) < len(userInput):print('Sorry.')returnright = 0for orgin_char,user_char in zip(orgin,userInput):if orgin_char == user_char:right += 1return right/len(orgin)a = 'have a nice day'
b = 'Have b aaaa Day'
print(Rate(a,b))

** 案例1:编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

 **案例2:编写一个函数, 接收字符串参数, 返回一个元组,'ehllo WROLD'元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

**案例3:编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.函数需求:- 将列对应(不包含k)表下标k之前的元素逆序;- 将下标k之后的元素逆序;

"""
:模拟轮盘抽奖游戏
# 轮盘分为三部分: 一等奖, 二等奖和三等奖;
# 轮盘转的时候是随机的,
#       如果范围在[0,0.08)之间,代表一等奖,
#       如果范围在[0.08,0.3)之间,代表2等奖,
#       如果范围在[0, 1.0)之间,代表3等奖,# 模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
"""
import random
rewardDict = {'一等奖': (0, 0.08),'二等奖': (0.08, 0.3),'三等奖': (0.3, 1),
}
def rewardFun():"""用户得奖等级"""# 生成一个0~1之间的随机数number = random.random()# 判断随机转盘转的数是几等奖?for k, v in rewardDict.items():# 这里的v是元组if v[0] <= number < v[1]:return k
# print(rewardFun())
resultDict = {}
for i in range(1000):# res: 本次转盘的等级(一等/二等/三等)res = rewardFun()if res not in resultDict:resultDict[res] = 1else:resultDict[res] = resultDict[res] + 1
for k, v in resultDict.items():print(k, '---->', v)

列表生成式
# 需求1:
# 1.接收变量k,a,b
s = '51 5000 10000'
# li = []
# for item in s.split():
#     li.append(int(item))
# k,a,b = li
# print(k,a,b)
# li=[int(item) for item in s.split()]
# print(li)
# print(k,a,b)# 需求2:生成一个列表,列表元素分别为[1**1,2**2,3**3,4**4...n*n]
# li = []
# for i in range(1,8):
#     li.append(i**i)
# print(li)# li = [i**i for i in range(1,8)]
# print(li)"""[experssion for item in 序列 if 判断语句]
"""
# li = [i ** 2 for i in range(1, 8) if i % 2 == 0]
# print(li)# 找出1~10之间的所有的偶数
print([i for i in range(1, 11) if i % 2 == 0])# 找出1~1000之间的所有质数
# def isPrime(num):
#     pass
# print([i for i in range(1, 1000) if isPrime(i)])
# s1='ABC' s2='123'(for嵌套循环)
# 'A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3'
print([i + j for i in 'ABC' for j in '123'])

列表生成式变形之for循环嵌套
"""需求:讲3x3的矩阵转换成一堆数组[[1,2,3],[4,5,6],[7,8,9]][1,2,3,4,5,6,7,8,9]
"""
li = [[1, 2, 3],[4, 5, 6],[7, 8, 9]
]
resLi = []
for item1 in li:  # [1,2,3] [4,5,6] [7,8,9]for item2 in item1:if item2 % 2 == 0:resLi.append(item2)
print(resLi)# print([item2 for item1 in li for item2 in item1])# from  itertools import chain
# print(list(chain(*li)))

列表生成式案例.
# 将列表中所有内容都变成小写
# li = ['dasdaFSDFSFDSF','dadDSADSAsdaDASsadas']
# print([i.lower() for i in li])# 找出/var/log目录中,所有以.log结尾的文件名或者目录名
import os
#print(os.listdir('/var/log'))
print([filename for filename in os.listdir('/var/log') if filename.endswith('.log')])

列表生成式练习
# 1. 找出1~10之间所有偶数, 并且返回一个列表,(包含以这个偶数为半径的圆的面积)
import math
# 方法一:
li = []
for r in range(2, 11, 2):square = math.pi * r * rli.append(square)
print(li)# 方法二:
print([math.pi * r * r for r in range(2, 11, 2)])# 方法三:
def square(r):"""求以r为半径的圆"""res = math.pi *r*rreturn resprint([square(r) for r in range(2,11,2)])

 4. (2018-腾讯-在线编程题)- 题目描述:给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输
入值小于1000。
如,输入为10, 程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))[2,3,5,7]- 输入描述:
输入包括一个整数n,(3 ≤ n < 1000)- 输出描述:
输出对数- 示例1 :输入:10
输出:2

字典生成式
# 需求1:假设有20个学生,学生分数在60~100之间,筛选出成绩在90分以上的学生
import random# stuInfo={}
# for i in range(20):
#     name = 'westos' + str(i)
#     score = random.randint(60,100)
#     stuInfo[name] = score
# print(stuInfo)
# stuInfo = {'westos'+ str(i):random.randint(60,100) for
#   i in range(20)}# highscore = {}
# for name,score in stuInfo.items():
#     if score > 90:
#         highscore[name] = score
# print(highscore)# print({name:score for name,score in stuInfo.items() if score > 90})

# 需求2:将所有的key值变为大写
# d = dict(a=1,b=2)
# new_d = {}
# for i in d:
#     new_d[i.upper()] = d[i]
# print('key转化为大写的字典:',new_d)# print({k.upper():v for k,v in d.items()})

# 需求3:大小写key值合并,统一以小写输出
d = dict(a=2, b=1, c=2, B=9, A=10)
print({k.lower(): d.get(k.lower(), 0) + d.get(k.upper(), 0) for k in d})
# for k, v in d.items():
#     low_k = k.lower()
#     if low_k not in new_d:
#         new_d[low_k] = v
#     else:
#         new_d[low_k] += v
#
# print(new_d)

1.创建生成器的第一重方式
In [7]: nums = (x*2 for x in range(10))In [8]: nums
Out[8]: <generator object <genexpr> at 0x7fb2a6137fc0>In [9]: for num in nums:...:     print(num)...:
0
2
4
6
8
10
12
14
16
18

2.创建生成器的方法2(定义一个函数,让这个函数变成生成器)
"""
# 1 1 2 3 5 8 13...
# def fib(num):
#     a,b,count = 0,1,1
#     while count <= num:
#         print(b)
#         a,b = b,a+b
#         count +=1
#
# fib(1000)
"""
如果在调用函数的时候,发现这个函数中有yeild
那么此时,也就不是调用函数了,而是创建了一个生成器对象
"""
def creat_num(all_num):print('~~~~~~~~~~~1~~~~~~~~~~~~~~~~~')a,b=0,1current_num  = 0while current_num < all_num:print('~~~~~~~~~2~~~~~~~~~~~~~~~~~')yield a # 相当于暂停了程序#print(a)print('~~~~~~~~~~~~~~3~~~~~~~~~~~~')a,b = b,b+acurrent_num += 1print('~~~~~~~~~~~4~~~~~~~~~~~~~~~~')obj = creat_num(5)
# 此时.我们发现程序会报错(告诉我们,生成器里面没有东西了)
while True:try:ret = next(obj)print('obj:',ret)except Exception as red:print(red.value)break
# obj = creat_num(5)
# print(obj)
# ret = next(obj)
# print(ret)
# ret1 = next(obj)
# print(ret1)
# ret2 = next(obj)
# print(ret2)
# ret3 = next(obj)
# print(ret3)
# ret4 = next(obj)
# print(ret4)
# ret5 = next(obj)
# print(ret5)# for num in obj:
#     print(num)
# 两个生成器对象之前并没有任何关系
# obj2 = creat_num(100)
# print(obj2)
# ret4 = next(obj2)
# print(ret4)

"""
使用send唤醒程序
使用send()函数来唤醒程序执行,使用send()函数的好处是
可以在唤醒的同时向断点中传入一个附加的数据"""
def create_num(all_num):a,b = 0,1current_num = 0while current_num < all_num:ret = yield aprint('>>>>>>>>ret>>>>>>>',ret)a,b = b,a+bcurrent_num += 1obj = create_num(100)
# red = next(obj)
# print(red)
red = obj.send(None)
print(red)"""
next和send得到的都是yield后面的值
不同的是send传递值而next不传递值注意:
不能把send放在第一个,因为第一次执行程序是从开始执行
并没有值来接收send
如果你非要把send放在第一个,那么传递的值应该是None
"""

python的函数应用相关推荐

  1. 【Python】函数图像绘制:二维图像、三维图像、散点图、心形图

    [Python]函数图像绘制:二维图像.三维图像.散点图.心形图 所有需要用的包 二维图像 三维图像 散点图绘制 心形图绘制 所有需要用的包 from mpl_toolkits.mplot3d imp ...

  2. 技术图文:Python 匿名函数 VS. C# Lambda表达式

    背景 前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结. 这是第 2 篇,从定义和应用两个角度来对比 Python 的匿名函数 与 C# 的La ...

  3. Python divmod() 函数

    Python divmod() 函数 python divmod() 函数把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b). 函数语法 divmod(a, b) ...

  4. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  5. python中函数包括标准库函数吗_Python语言和标准库(第二章:函数)

    a-如何创建函数. b-给出一些指导原则,帮助思考如何创建和组织程序以使用函数. c-如何编写函数,使随后可以询问它们的工作方式和实现的功能. 2.1将程序放在单独的文件里 为了更加方便,从现在开始, ...

  6. c int转字符串_【C++实现python字符串函数库】字符串匹配函数startswith与endswith

    [C++实现python字符串函数库]字符串匹配函数startswith与endswith 这两个函数用于匹配字符串的开头或末尾,判断是否包含另一个字符串,它们返回bool值.startswith() ...

  7. python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法

    python中函数和方法的区别?Python编程判断当前获取的对象是函数还是方法 目录

  8. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  9. Python staticmethod() 函数

    Python staticmethod() 函数 正在上传-重新上传取消​ Python 内置函数 python staticmethod 返回函数的静态方法. 该方法不强制要求传递参数,如下声明一个 ...

  10. python基础--函数

    #python中函数的定义:函数是逻辑结构化和过程化的一种编程方法,用来实现某些特定的功能.#python中函数简单定义的方法# def test(x):# "this is new fun ...

最新文章

  1. Java编写的五子棋小游戏
  2. 1.5.2 在IIS上配置ASP.NET(转)
  3. Centos7 Docker 删除容器_入门试炼08
  4. springboot国际化04
  5. 【写作技巧】毕业论文写作意义
  6. PTA:图的理论习题集
  7. [模板]01分数规划
  8. 如何在 Mac 上卸载 Chrome?
  9. 2、Zookeeper集群搭建、命令行Client操作
  10. 灰灰考研c语言讲义,灰灰全书之数据结构试讲
  11. 云计算核心技术剖析学习笔记_2
  12. 计算机会计u8实验报告,会计信息系统实验报告 用友u8
  13. ufs qfil注意事项
  14. python求15 17 23 65 97的因数_32个常用的Python功能介绍
  15. 运放技术——谐波失真THD
  16. SurfaceView出现ANR:Surface has already been released的解决办法
  17. python数据抓取工具_【重磅开源】Hawk-数据抓取工具:简明教程
  18. 在统计学中_[求助] OR在统计学中指什么?
  19. 三星平板 N8000刷机升级安卓版本到7.1过程记录
  20. mysql 小彬实战命令

热门文章

  1. pdc 半圆_PDC。 我已经准备好进行革命了。 打动我。 把我吹走
  2. 中国近五年的计算机专业就业率,未来五年,我国最有发展前途的工科专业,毕业好就业,发展前途好...
  3. spring5源码阅读(五)Post Processors类型及作用详解
  4. SpringBoot logback-spring配置,再也不用为日志烦恼了。再推荐IDEA一个日志插件Grep Console美美哒展示控制台输出
  5. 计算机二级ppt云计算,2021年全国计算机等级考试二级officeppt演示文稿题目.docx
  6. 扶桑号战舰(rmq+递归处理)
  7. JAVA 随机数生成方式
  8. 【ubuntu_problems】搜狗输入法打字没有候选项
  9. redis配置类+redis工具类
  10. e5cc温控仪通讯参数设定_e5cc温控器参数设置