python有趣的函数 python比较有趣的代码

推荐 8 个炫酷的 Python 装饰器1、 lru_cache
这个装饰器来自functools模块 。该模块包含在标准库中,非常易于使用 。它还包含比这个装饰器更酷的功能,但这个装饰器是非常受人喜欢的 。此装饰器可用于使用缓存加速函数的连续运行 。当然 , 这应该在使用时记住一些关于缓存的注意事项 , 但在通用使用情况下,大多数时候这个装饰器都是值得使用的 。
2、JIT
JIT是即时编译的缩写 。通常每当我们在Python中运行一些代码时,发生的第一件事就是编译 。这种编译会产生一些开销,因为类型被分配了内存,并存储为未分配但已命名的别名,使用即时编译,我们在执行时才进行编译 。
在很多方面,我们可以将其视为类似于并行计算的东西,其中Python解释器同时处理两件事以节省时间 。Numba JTI编译器因将这一概念提到Python中而闻名,可以非常轻松地调用此装饰器,并立即提高代码的性能 。Numba包提供了JIT装饰器,它使运行更密集的软件变得更加容易,而不必进入C 。
3、do_twice
do_twice装饰器的功能与它的名字差不多 。此装饰器可用于通过一次调用运行两次函数,对调试特别有用 。它可以用于测量两个不同迭代的功能 。
4、count_calls
count_calls装饰器可用于提供有关函数在软件中使用多少次的信息 。与do_twice一样,对调试也特别有用 。
5、dataclass
为了节省编写类的时间 , 推荐使用dataclass装饰器 。这个装饰器可用于快速编写类中常见的标准方法,这些方法通常会在我们编写的类中找到 。
6、singleton
singleton是一个单例装饰器 。通常,单例装饰器是由用户自己编写的,实际上并不是导入的 。
7、use_unit
在科学计算中经常派上用场的一种装饰器是use_unit装饰器 。此装饰器可用于更改返回结果的表示单位 。这对于那些不想在数据中添加度量单位但仍希望人们知道这些单位是什么的人很有用 。这个装饰器可不是在任何模块中真正有用,但它是非常常见的,对科学应用程序非常有用 。
Python的turtle库有什么用海龟库(turtle)
海龟库 (turtle) 是Python语言中一个很流行的绘制图像的函数库 , 想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形 。
海龟库积木盒有点类似Kitten创作工具的画笔和动作积木盒的结合体,可以绘制、控制画笔移动,大家使用一下就可以体会了哦 。
海龟图的窗口坐标系同Kitten舞台类似,小窗口的情况下,海龟图高和宽是固定400像素 。全屏的海龟图和浏览器本身的尺寸有关 。
请点击输入图片描述
请点击输入图片描述
海龟图和math库、random库一样,需要先导入库 import turtle,才可以使用库中的函数 。使用海龟库中的函数,你可以画出各种有趣的图形 。
python用函数给不及格成绩加分python用函数给不及格成绩加分
Python的高级特征你知多少?来对比看看
机器之心
人工智能信息服务平台
来自专栏机器之心
Python 多好用不用多说 , 大家看看自己用的语言就知道了 。但是 Python 隐藏的高级功能你都 get 了吗?本文中,作者列举了 Python 中五种略高级的特征以及它们的使用方法,快来一探究竟吧!
选自towardsdatascience,作者:George Seif,机器之心编译 。
Python 是一种美丽的语言,它简单易用却非常强大 。但你真的会用 Python 的所有功能吗?
任何编程语言的高级特征通常都是通过大量的使用经验才发现的 。比如你在编写一个复杂的项目,并在 stackoverflow 上寻找某个问题的答案 。然后你突然发现了一个非常优雅的解决方案 , 它使用了你从不知道的 Python 功能!
这种学习方式太有趣了:通过探索,偶然发现什么 。
下面是 Python 的 5 种高级特征 , 以及它们的用法 。
Lambda 函数
Lambda 函数是一种比较小的匿名函数——匿名是指它实际上没有函数名 。
Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda 函数,我们根本没为它命名 。这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数 。
lambda 函数可以使用任意数量的参数,但表达式只能有一个 。
【python有趣的函数 python比较有趣的代码】x = lambda a, b : a * b print(x(5, 6)) # prints '30' x = lambda a : a*33 print(x(3)) # prints '12'
看它多么简单!我们执行了一些简单的数学运算 , 而无需定义整个函数 。这是 Python 的众多特征之一 , 这些特征使它成为一种干净、简单的编程语言 。
Map 函数
Map() 是一种内置的 Python 函数,它可以将函数应用于各种数据结构中的元素,如列表或字典 。对于这种运算来说,这是一种非常干净而且可读的执行方式 。
def square_it_func(a): return a * a x = map(square_it_func, [1, 4, 7]) print(x) # prints '[1, 16, 47]' def multiplier_func(a, b): return a * b x = map(multiplier_func, [1, 4, 7], [2, 5, 8]) print(x) # prints '[2, 20, 56]'看看上面的示例!我们可以将函数应用于单个或多个列表 。实际上,你可以使用任何 Python 函数作为 map 函数的输入,只要它与你正在操作的序列元素是兼容的 。
Filter 函数
filter 内置函数与 map 函数非常相似,它也将函数应用于序列结构(列表、元组、字典) 。二者的关键区别在于 filter() 将只返回应用函数返回 True 的元素 。
详情请看如下示例:
# Our numbers numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] # Function that filters out all numbers which are odd def filter_odd_numbers(num): if num % 2 == 0: return True else: return False filtered_numbers = filter(filter_odd_numbers, numbers) print(filtered_numbers) # filtered_numbers = [2, 4, 6, 8, 10, 12, 14]
我们不仅评估了每个列表元素的 True 或 False,filter() 函数还确保只返回匹配为 True 的元素 。非常便于处理检查表达式和构建返回列表这两步 。
Itertools 模块
Python 的 Itertools 模块是处理迭代器的工具集合 。迭代器是一种可以在 for 循环语句(包括列表、元组和字典)中使用的数据类型 。
使用 Itertools 模块中的函数让你可以执行很多迭代器操作,这些操作通常需要多行函数和复杂的列表理解 。关于 Itertools 的神奇之处,请看以下示例:
from itertools import * # Easy joining of two lists into a list of tuples for i in izip([1, 2, 3], ['a', 'b', 'c']): print i # ('a', 1) # ('b', 2) # ('c', 3) # The count() function returns an interator that # produces consecutive integers, forever. This # one is great for adding indices next to your list # elements for readability and convenience for i in izip(count(1), ['Bob', 'Emily', 'Joe']): print i # (1, 'Bob') # (2, 'Emily') # (3, 'Joe') # The dropwhile() function returns an iterator that returns # all the elements of the input which come after a certain # condition becomes false for the first time. def check_for_drop(x): print 'Checking: ', x return (x5) for i in dropwhile(should_drop, [2, 4, 6, 8, 10, 12]): print 'Result: ', i # Checking: 2 # Checking: 4 # Result: 6 # Result: 8 # Result: 10 # Result: 12 # The groupby() function is great for retrieving bunches # of iterator elements which are the same or have similar # properties a = sorted([1, 2, 1, 3, 2, 1, 2, 3, 4, 5]) for key, value in groupby(a): print(key, value), end=' ') # (1, [1, 1, 1]) # (2, [2, 2, 2]) # (3, [3, 3]) # (4, [4]) # (5, [5])
Generator 函数
Generator 函数是一个类似迭代器的函数,即它也可以用在 for 循环语句中 。这大大简化了你的代码,而且相比简单的 for 循环,它节省了很多内存 。
比如,我们想把 1 到 1000 的所有数字相加 , 以下代码块的第一部分向你展示了如何使用 for 循环来进行这一计算 。
如果列表很小,比如 1000 行,计算所需的内存还行 。但如果列表巨长 , 比如十亿浮点数,这样做就会出现问题了 。使用这种 for 循环,内存中将出现大量列表,但不是每个人都有无限的 RAM 来存储这么多东西的 。Python 中的 range() 函数也是这么干的,它在内存中构建列表 。
代码中第二部分展示了使用 Python generator 函数对数字列表求和 。generator 函数创建元素,并只在必要时将其存储在内存中,即一次一个 。这意味着 , 如果你要创建十亿浮点数,你只能一次一个地把它们存储在内存中!Python 2.x 中的 xrange() 函数就是使用 generator 来构建列表 。
上述例子说明:如果你想为一个很大的范围生成列表 , 那么就需要使用 generator 函数 。如果你的内存有限,比如使用移动设备或边缘计算,使用这一方法尤其重要 。
也就是说,如果你想对列表进行多次迭代 , 并且它足够?。?可以放进内存,那最好使用 for 循环或 Python 2.x 中的 range 函数 。因为 generator 函数和 xrange 函数将会在你每次访问它们时生成新的列表值,而 Python 2.x range 函数是静态的列表,而且整数已经置于内存中,以便快速访问 。
# (1) Using a for loopv numbers = list() for i in range(1000): numbers.append(i 1) total = sum(numbers) # (2) Using a generator def generate_numbers(n): num, numbers = 1, [] while numn: numbers.append(num) num= 1 return numbers total = sum(generate_numbers(1000)) # (3) range() vs xrange() total = sum(range(10001)) total = sum(xrange(10001))
python生成金字塔人生苦短,我用python!
本文将介绍三种使用python实现生成金字塔的方法 , 文末归纳了知识点 。
本方法使用print打印出每一个字符,通过for循环计算每一次需要输出的空格和星号 。
print语句中,end=''表示不换行 。
本方法利用了一个有趣的规律:
在程序中表达为 m= pow(10,i) , 即 m = mpow(10,i),例如:
通过运行我们发现输出数字的时候,由于每行数字是一次性输出 , 而非每个数字输出一次,相比方法一效率有了提升 。
pow(10,i) 表示 10 i。
本方法在方法二的基础上再次改进空格的输出方式,print(b*a)语句中,a表示输出的次数 。
当我把层数n设置为100的时候,发生了壮观的一幕,感兴趣的朋友欢迎自己试试 。
文中同时使用了 range 数列,range[10] 表示:0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9。
以下是 print() 方法的语法:
参数
pow() 方法返回 x y (x的y次方) 的值 。语法为:
参考文献:
[1]Python for 循环语句
[2]Python print() 函数
[3]Python pow() 函数
[4]Number Pyramid
if函数讲课怎么命名if函数讲课命名python有趣的函数 , 我们新建一列,命名为“指标”,我们要把进度大于等于0.4的都选出来 , 命名为是,小于0.4的命名为否筛选出来 。
1python有趣的函数:新建”指标“ 。
2:点击fx(函数输入框),就会自动跳出一个窗口 。
Python其实很简单 第十二章 函数与变量的作用域 在前面已经多次提到函数这个概念,之所以没有解释什么是函数,是因为程序中的函数和数学中的函数差不多,如input()、range()等都是函数 , 这些都是Python的标准函数,直接使用就可以了 。根据需要,用户也可以自定义函数 。
12.1 函数
函数的结构:
def 函数名(参数):
函数体
return 返回值
例如:数学中的函数f(x)=2x 5在Python中可以定义如下:
def f(x):
y=2*x 5
return(y)
如果x取值为3,可以使用如下语句调用函数:
f(3)
下面给出完整的程序代码:
def f(x):
y=2*x 5
return(y)
res=f(3)
print(res)
运行结果:11
如上例中的x是函数f(x)的参数,有时也被称为形式参数(简称形参),在函数被调用时,x被具体的值3替换y就是函数的返回值,这个值3也被称为实际参数(简称实参) 。
上例中的y是函数f(x)的返回值 。并不是所有的函数都有参数和返回值 。如下面的函数:
def func():
print('此为无参数传递、无返回值的函数')
func()
输出结果:此为无参数传递、无返回值的函数
可以看出 , 该函数func()无参数,故调用时不用赋给参数值 。
函数也可以有多个参数,如f(x,y)=x2 y2,可用Python语言定义如下:
def f(x,y):
z=x**2 y**2
return z
print(f(2,3)) #调用函数f(x,y)
输出结果:13
也可以通过直接给参数列表中的参数赋值的方法 , 为参数添加默认值,如果用户赋予参数值 , 则按照用户赋值执行,否则使用默认值 。例如:
def f(x,y=3):
z=x**2 y**2
return z
若调用时参数列表为(2,1),即x赋值为2,y赋值为1:
print(f(2,1))
输出结果为:5
若调用时参数列表为(2),即x赋值为2,y赋值省缺,则y使用默认值:
print(f(2))
输出结果为:13
回调函数,又称函数回调,是将函数作为另一函数的参数 。
例如:
def func(fun,m,n):
fun(m,n)
def f_add(m,n):
print('m n=',m n)
def f_mult(m,n):
print('m*n=',m*n)
func(f_add,2,3)
func(f_mult,2,3)
输出结果:
m n= 5
m*n= 6
在f_add(m,n)和f_mult(m,n)被定义前,func(fun,m,n)中的fun(m,n)就已经调用了这两个函数,即“先调用后定义”,这也是回调函数的特点 。
如果无法预知参数的个数,可以在参数前面加上*号,这种参数实际上对应元组类型 。譬如,参会的人数事先不能确定,只能根据与会人员名单输入:
def func(*names):
print('今天与会人员有:')
for name in names:
print(name)
func('张小兵','陈晓梅','李大海','王长江')
运行后 , 输出结果为:
今天与会人员有:
张小兵
陈晓梅
李大海
王长江
参数为字典类型 , 需要在参数前面加上**号 。
def func(**kwargs):
for i in kwargs:
print(i,kwargs[i])
func(a='a1',b='b1',c='c1')
输出结果为:
a a1
b b1
c c1
一个有趣的实例:
def func(x,y,z,*args,**kwargs):
print(x,y,z)
print(args)
print(kwargs)
func('a','b','c','Python','is easy',py='python',j='java',ph='php')
输出结果:
a b c # 前三个实参赋给前三个形参
('Python', 'is easy') # *args接收元组数据
{'py': 'python', 'j': 'java', 'ph': 'php'} # **kwargs接收字典数据
12.2 变量的作用域
变量的作用域即变量的有效范围,可分为全局变量和局部变量 。
局部变量
在函数中定义的变量就是局部变量,局部变量的作用域仅限于函数内部使用 。
全局变量
在主程序中定义的变量就是全局变量,但在函数中用关键字global修饰的变量也可以当做全局变量来使用 。
全局变量的作用域是整个程序,也就是说,全局变量可以在整个程序中可以访问 。
下面通过实例去讨论:
程序1:
a=1 # a为全局变量
def a_add():
print('a的初值:',a) # 在函数中读取a的值
a_add() # 调用函数a_add()
a =1 # 主程序语句,a增加1
print('a现在的值是:',a) # 主程序语句,读取a的值
运行结果:
a的初值: 1
a现在的值是: 2
这个结果和我们想象的一样 , 全局变量a既可以在主程序中读?。部梢栽谧映绦颍ê┲卸寥?。
程序2:
a=1
def a_add():
a =1
print('a的初值:',a)
a_add()
print('a现在的值是:',a)
运行程序1时出现如下错误提示:
UnboundLocalError: local variable 'a' referenced before assignment
意思是:局部变量'a'在赋值之前被引用 。
从语法上来讲 , 该程序没有错误 。首先定义了一个全局变量a并赋值为1,又定义了一个函数a_add(),函数内的语句a =1就是出错的根源,虽然我们的初衷是想让全局变量a的值增加1 , 但从错误提示看,这个语句中的a并不是全局变量,而是局部变量 。看来,在函数中读取全局变量的值是没有问题的(在程序1中已经得到了验证) , 但要在函数中改变全局变量的值是不行的(在程序2的错误提示a =1中的a 是局部变量,而非全局变量) 。
怎样解决这个问题?
程序3:
a=1
def a_add(x):
x =1
return x
print('a的初值:',a)
a=a_add(a)
print('a现在的值是:',a)
运行结果:
a的初值: 1
a现在的值是: 2
结果的确是正确的 , 但在函数a_add(x)中没有调用变量a(没有出现变量a) 。
程序4:
a=1
def a_add(a):
a =1
return a
print('a的初值:',a)
a=a_add(a)
print('a现在的值是:',a)
运行结果:
a的初值: 1
a现在的值是: 2
对比程序4和程序3不难发现,其实程序4只是简单的把函数的参数x变成了a,这个a的实质和程序3中的x还是一样的 。这进一步证实,函数中的a是局部变量 , 与主程序的全局变量a有着本质的区别 。
程序5:
a=1
def a_add():
global a
a =1
print('a的初值:',a)
a_add()
print('a现在的值是:',a)
运行结果:
a的初值: 1
a现在的值是: 2
程序5和程序2相比较,仅仅是在函数中添加了一个定义“global a”,此时的局部变量a就可以当做全局变量使用,由于它和全局变量a同名,自然也就不用区分a究竟是全局变量还是局部变量了,在主程序和该函数内都可以访问、修改变量a的值了 。
虽然使用global可使变量使用起来非常方便,但也容易引起混淆,故在使用过程中还是谨慎为好 。
12.3 函数的递归与嵌套
递归,就是函数调用它自身 。递归必须设置停止条件,否则函数将无法终止,形成死循环 。
以计算阶乘为例:
def func(n):
if n==1:
return 1
else:
return n*func(n-1) #func( )调用func( )
print(func(5))
运行结果为:120
嵌套,指在函数中调用另外的函数 。这是程序中常见的一种结构,在此不再赘述 。
匿名函数
Python中可以在参数前加上关键字lambda定义一个匿名函数,这样的函数一般都属于“一次性”的 。
例如:
程序1:这是一个常规的函数定义和调用 。
def f_add(x,y):
return x y
print(f_add(2,3))
输出结果:5
程序2:使用lambda定义匿名函数 。
f_add=lambda x,y:x y
print(f_add(2,3))
输出结果:5
从上面的代码可以看出,使用lambda仅仅减少了一行代码 。f_add=lambda x,y:x y中的f_add不是变量名,而是函数名 。程序1和程序2的print( )语句中的参数都是一样的——调用函数f_add( ) 。所以,匿名函数并没有太多的优点 。
python有趣的函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python比较有趣的代码、python有趣的函数的信息别忘了在本站进行查找喔 。

    推荐阅读