Python的简洁艺术:五行以内代码完成任务
引言Python是一种以直接的语法和高效能而闻名的编程语言,它在初学者和专家程序员中都非常受欢迎。其设计强调可读性和简洁性,使开发者能够用更少的代码行数表达复杂的想法,不仅提高了代码的可读性,还提高了其维护性和性能。
Python的哲学:少即是多Python的核心哲学在《Python之禅》(PEP 20)中得到了体现,它提倡在编程中追求简单和直接。Python的语法和标准库旨在促进清晰、简洁的编码。这一哲学鼓励开发者用更少、更可读的代码行实现更多功能,使代码库更易于理解和维护。
促进简洁性的一些关键特性列表推导:提供了一种紧凑的列表处理方式。通过结合迭代、过滤和转换元素,列表推导允许在一个可读的代码行中完成大量工作。
Lambda函数:匿名函数在高阶函数(如map和filter)中使用短暂、临时函数时特别有用。
内置函数和模块:内置函数(如map、filter)和模块(如itertools)提供了强大但简洁的数据操作方式。
with语句:简化了像文件流这样的资源管理,确保资源以最少的代码得到妥善管理和释放。
代码示例:用更少的代码做更多的事示例 1:生成斐波那契序列
任务:生成斐波那契序列的前10个数字。
def fibonacci(n): sequence = [0, 1] for _ in range(2, n): sequenceend(sequence[-1] + sequence[-2]) return sequenceprint(fibonacci(10))
这个函数优雅地生成了斐波那契序列,并且考虑了可读性。
示例 2:优雅的文件数据提取
任务:提取文本文件每行的第一个单词。
first_words = []with open('file.txt') as file: for line in file: first_wordsend(line.split()[0])
一种清晰简洁的从文件中提取数据的方法。
示例 3:一行代码实现字典反转
任务:在一行代码内反转字典中的键和值。
def invert_dict(original_dict): return {value: key for key, value in original_dict.items()}inverted_dict = invert_dict({'a': 1, 'b': 2})
使用推导式进行简单易读的字典反转。
示例 4:实现迷你计算器
任务:创建一个基本算术运算的迷你计算器。
def calculate(op, a, b): operations = {"+": a + b, "-": a - b, "*": a * b, "/": a / b} return operations.get(op, "Invalid operation")print(calculate('+', 3, 4))
一个五行内的迷你计算器,兼顾简洁性和清晰性。
示例 5:快速图像处理
任务:将图像文件转换为灰度图。
from PIL import Imagedef to_grayscale(image_path): with Image.open(image_path) as img: imgnvert('L').save('grayscale_image.jpg')to_grayscale('image.jpg')
使用Python的PIL库以清晰的方式转换图像为灰度图。
过度简洁的陷阱虽然在Python中简洁是一种美德,但平衡它与可读性至关重要。过于复杂的单行代码可能变得晦涩难懂,违背了Python清晰易读的初衷。为了简洁而牺牲清晰是不可取的。
结论简洁的Python编程提供了诸多好处,比如提高可读性,简化维护等等。Python的简单和力量在于它能够用几行精心编写的代码表达复杂的操作,体现了编程的美学品位。
利用简单公式把生日转换生辰八字
本文将会介绍利用极简公式,将生日转换成天干地支,熟悉公式前,一些基础知识必须熟记!
十天干配数:
甲1、乙2、丙3、丁4、戊5、己6、庚7、辛8、壬9、癸10或0。
十二地支配数:
子1、丑2、寅3、卯4、辰5、巳6、午7、未8、申9、酉10、戌11、亥12或0。
十二月令:
立春(公历2月3-5日)、惊蛰(公历3月5-7日)、清明(公历4月4-6日)、
立夏(公历5月5-7日)、芒种(公历6月5-7日)、小暑(公历7月6-8日)、
立秋(公历8月7-9日)、白露(公历9月7-9日)、寒露(公历10月8-9日)、
立冬(公历11月7-8日)、大雪(公历12月6-8日)、小寒(公历1月5-7日)。
十二月建:
正月立春建寅,二月惊蛰建卯,三月清明建辰,
四月立夏建巳,五月芒种建午,六月小暑建未,
七月立秋建申,八月白露建酉,九月寒露建戌,
十月立冬建亥,冬月大雪建子,腊月小寒建丑。
十二时辰:
子时23~1点,丑时1~3点,寅时3~5点,卯时5~7点,辰时7~9点,巳时9~11点,午时11~13点,未时13~15点,申时15~17点,酉时17~19点,戌时19~21点,亥时21~23点。
闰年:
四年1闰,百年不闰,四百年再闰;年份能被4整除即为闰年,而整百年的年份要被400整除才为闰年。(例:1900年是平年,1904年是闰年。)
修正值:
1月修正值+1,(逢闰年1月修正值+0)
2月修正值+2,
3月修正值+0,
4月、5月修正值+1,
6月、7月修正值+2,
8月修正值+3,
9月、10月修正值+4,
11月、12月修正值+5。
熟练掌握以上知识,四柱八字中月令及时支即可一目了然,1分钟可以将90%以上的生日转换成天干地支。
现在我们正式进入公式:
以2000年2月20日23:15为例
年干:
(年份-3)÷10=所得余数;
例:(2000年-3)÷10=199余7,7对应的天干是庚;
年支:
(年份-3)÷12=所得余数;
例:(2000年-3)÷12=166余5,5对应的地支是辰;
年柱:庚辰
月干:
(年干×2+月令)÷10=所得余数;
例:(庚7×2+正月1)÷10=1余5,5对应的天干是戊;
月令(月支):
请参照十二月令;例:2月20日即属正月立春时令建寅,正月代数为1;
月柱:戊寅
日元(日干):
(年份×5+年份÷4+9+日+单双月+修正值)÷60=所得余数个位;
(2000年前取十位,2000年后取百位;单月+0,双月+30)
例:2000年2月20日,年100×5+年100÷4+9+20(日)+30(双月)+2(2月修正值+2)÷60=9余46,取余数46个位数为6,6对应的天干为己;
日支:
日元所得余数(余数不足12直接取余数)÷12=所得余数;
例:日元余数46÷12=3余10,10对应的地支为酉;
日柱:己酉
时干:
日干×2+时支-2=所得余数个位;
例:日干6×2+1时支-2=11,取11个位数1,1对应的天干是甲;
时支:
请参照十二时辰;23:15为夜子时,子代数为1;
时柱:甲子
由此得出:2000年2月20日23:15 四柱八字为:庚辰 戊寅 己酉 甲子
鉴于闰年平年、单月双月、夜子时晨子时等时间,下面我们多举几个特例:
一、1998年1月23日00:45 (因立春才是新年,1月23日即属腊月小寒时令,八字出生年柱则为1997年,其它柱依然以1998年计算)
年干:(1997-3)÷10=199余4,4对应的天干为丁;
年支:(1997-3)÷12=166余2,2对应的地支为丑;
月干:(年干4×2+月令12)÷10=2余0,0对应的天干为癸;
月令:请参照十二月令,1月23日即属腊月小寒时令建丑,腊月代数为12;
日元:年98×5+年98÷4+9+23(日)+0(单月)+1(1月修正值+1)÷60=9余7,7对应的天干为庚;
日支:日元余数7对应的地支为午;
时干:日干7×2+1时支-2=13,取13个位数3,3对应的天干是丙;
时支:请参照十二时辰;00:45为晨子时,子代数为1;
由此得出:1998年1月23日00:45 四柱八字为:丁丑 癸丑 庚午 丙子
二、1996年10月30日 11:45
年干:(1996-3)÷10=199余3,3对应的天干为丙;
年支:(1996-3)÷12=166余1,1对应的地支为子;
月干:(年干3×2+月令9)÷10=1余5,5对应的天干为戊;
月令:请参照十二月令,10月30日即属九月寒露时令建戌,九月代数为9;
日元:年96×5+年96÷4+9+30(日)+30(双月)+4(10月修正值+4)÷60=9余37,取余数37个位数为7,7对应的天干为庚;
日支:日元余数37÷12=3余1,1对应的地支为子;
时干:日干7×2+7时支-2=19,取19个位数9,9对应的天干是壬;
时支:请参照十二时辰;11:45为午时,午代数为7;
由此得出:1996年10月30日 11:45 四柱八字为:丙子 戊戌 庚子 壬午
三、2004年1月1日00:00(因立春才是新年,1月1日即属冬月大雪时令,八字出生年柱则为2003年,其它柱依然以2004年计算)
年干:(2003-3)÷10=200余0,0对应的天干为癸;
年支:(2003-3)÷12=166余8,8对应的地支为申未;
月干:(年干0×2+月令11)÷10=1余1,1对应的天干为甲;
月令:请参照十二月令,1月1日即属冬月大雪时令建子,冬月代数为11;
日元:年104×5+年104÷4+9+1(日)+0(单月)+0(逢闰年1月修正值+0)÷60=9余16,取余数16个位数为6,6对应的天干为己;
日支:日元余数16÷12=1余4,4对应的地支为卯;
时干:日干6×2+1时支-2=11,取11个位数1,1对应的天干是甲;
时支:请参照十二时辰;00:00为子时,子代数为1;
由此得出:1996年10月30日 11:45 四柱八字为:癸未 甲子 己卯 甲子
*所有公式的余数要用笔算,不可以用计算器!!!
*另外由于学派不同,针对夜子时,晨子时的补充公式,供大家参考:
时干=日干×2+时支,(晨子时-1,夜子时11),如果和大于10,则取个位数。
此系列公式可以将绝大部分日期转换为四柱八字,因月令时节和公历时间转换的不确定性,每当月令转换之际的日期还是建议参考万年历。
希望本文能帮助有需要之人,头条G夫人,转载请注明出处!谢谢!