编程技巧

【编程技巧】如何使用带参数的宏 && 常用的带参数宏

前提是你 提交于 2020-01-16 11:44:42
本文使用C/C++语言进行编程(点进来都是C/C++的盆友吧 =w=) 0x00 什么是宏定义 如果还不知道宏定义的童鞋就查一下吧……点进来的应该都是学过的吧…… 0x01 带参数的宏是个什么鬼?喵喵喵? 带参数的宏不是鬼,也不是一只猫。 其实顾名思义,就是宏里有参数——没学过参数的童鞋也学一下函数吧。 下面本文正式开始: 0x02 如何使用带参数的宏 先举个栗子: 1 #define random(a, b) rand() % b + a 这是一个生成随机数的宏定义,比如说想生成 1-10000之间的随机数,就可以使用random(1, 10000)来生成。(注意:请使用srand来初始化随机数种子) 如果频繁使用随机数的话,这个宏比较有用。其特点为可以 在不影响代码可读性的前提上令代码更简洁 ,我不知道从事IT者会不会这么用,但OIer一般会这么用。 好了,扯了那么久的淡, 现在来谈谈具体的语法吧!具体语法: #define 宏名称(参数表) 宏体 这个可以根据上面的栗子多理解理解,还要去多实践实践,相信很快就会明白哒~ 0x03 常用的带参数宏(循环) 当我们需要大量写循环的时候, 可以用宏来减少代码量,又不失代码可读性。通常这两个宏是比较常用的: FOR宏(一般用于i从0开始的情况) #define FOR(i, a, b) for (int i = a;i < b;i++

C/C++ 不可不知道的编程技巧!第一部分

℡╲_俬逩灬. 提交于 2020-01-04 00:18:30
1. 记住阿姆达尔定律: funccost是函数func运行时间百分比,funcspeedup是你优化函数的运行的系数。 所以,如果你优化了函数TriangleIntersect执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。 这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。 这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。 2. 代码先保证正确,然后再考虑优化 这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。 分多步来做性能优化。 先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。 然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。所有频繁调用的函数,都需要优化。 3. 我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。 4.跳转和分支执行代价高,如果可能,尽量少用。 函数调用需要两次跳转,外加栈内存操作。 优先使用迭代而不是递归。 使用内联函数处理短小的函数来消除函数调用开销。 将循环内的函数调用移动到循环外(例如,将for(i=0;i<100;i++) DoSomething();改为DoSomething() { for(i=0;i<100;i++) { … }})。 if

pandas编程技巧3

我的梦境 提交于 2019-12-25 01:50:45
pandas编程技巧3 np.nan_to_num(x) 使用0替代数组x中的nan,使用有限的数字代替inf元素 使用背景:在是使用numpy数组时,常常会出现nan或者inf的元素,可能会造成数值计算的一些错误。可以使用numpy库的函数nan_to_num(),使得nan和inf能够最简单地转换成相应的数值。 from pandas import DataFrame, Series import numpy as np a = np.array([ [np.nan, np.inf, 0, 10], [np.inf, np.nan, np.nan, 3] ]) print(a) print("nan_tp_num()转换后的结果:") print(np.nan_to_num(a)) ----------------------------result---------------------- [[nan inf 0. 10.] [inf nan nan 3.]] nan_tp_num()转换后的结果: [[0.00000000e+000 1.79769313e+308 0.00000000e+000 1.00000000e+001] [1.79769313e+308 0.00000000e+000 0.00000000e+000 3.00000000e+000]]

设计原则和编程技巧之最少知识原则

点点圈 提交于 2019-12-15 10:48:15
什么是最少知识原则? 最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。本节我们主要针对对象来说明这个原则,下面引用《面向对象设计原理与模式》一书中的例子来解释最少知识原则: 某军队中的将军需要挖掘一些散兵坑。下面是完成任务的一种方式:将军可以通知上校让他叫来少校,然后让少校找来上尉,并让上尉通知一个军士,最后军士唤来一个士兵,然后命令士兵挖掘一些散兵坑。 这种方式十分荒谬,不是吗?不过,我们还是先来看一下这个过程的等价代码: gerneral.getColonel( c ).getMajor( m ).getCaptain( c ) .getSergeant( s ).getPrivate( p) 让代码通过这么长的消息链才能完成一个任务,这就像让将军通过那么多繁琐的步骤才能命令别人挖掘散兵坑一样荒谬!而且,这条链中任何一个对象的改动都会影响整条链的结果。 减少对象之间的联系 单一职责原则指导我们把对象划分成较小的粒度,这可以提高对象的可复用性。但越来越多的对象之间可能会产生错综复杂的联系,如果修改了其中一个对象,很可能会影响到跟它相互引用的其他对象。对象和对象耦合在一起,有可能会降低它们的可复用性。在程序中,对象的“朋友”太多并不是一件好事,“城门失火,殃及池鱼”和

关于Python的10大实用编程技巧

懵懂的女人 提交于 2019-12-04 11:21:26
Python 是一种通用的脚本开发语言,比其他编程语言更加简单、易学,其面向对象特性甚至比Java、C#、.NET更加彻底,因此非常适合快速开发。 Python 已经成为最受欢迎的程序设计语言之一。2011 年 1 月,它被 TIOBE 编程语言排行榜评为 2010 年度语言。2018 年 8 月的 TIOBE 排行榜,Python超越C++指日可待。 话不多说,IT君现在就为大家介绍一些有关Python的编程技巧,请收下! 1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例: x,y= 10,20print(x,y)x,y= y,xprint(x,y) #1 (10, 20)#2 (20, 10) 赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量和 。 一旦赋值完成,新的元组变成了未被引用状态并且被标记为可被垃圾回收,最终也完成了变量的交换。 2. 链状比较操作符 比较操作符的聚合是另一个有时很方便的技巧: n= 10result= 1< n< 20print(result)# Trueresult= 1> n<= 9print(result)# False 3. 使用三元操作符来进行条件赋值 三元操作符是 if-else 语句也就是条件操作符的一个快捷方式: [表达式为真的返回值]

人生苦短,我用Java(目录)

隐身守侯 提交于 2019-12-03 13:12:45
人生苦短,我用Java(目录) 基础 简介 数据类型 文件操作 迭代器和生成器 函数 内置函数 常用模块 面向对象编程 异常处理 socket网络编程 线程 进程/协程/异步I/O 进阶 魔法函数 深入类和对象 元类编程 自定义序列类 多线程、多进程和线程池编程 python3实用编程技巧进阶(一) python3实用编程技巧进阶(二) python3实用编程技巧进阶(三) python3实用编程技巧进阶(四) python3实用编程技巧进阶(五) Django 基础 路由规则 Model 模板 cookie session CSRF 中间件 缓存和信号 form组件 ModelForm Ajax Django2.0文档 Django1.11.6文档 Django思维导图 Django项目部署 RESTful API 设计指南 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Django rest framework(4)----版本 Django rest framework(5)----解析器 Django rest framework(6)----序列化 Django rest framework(7)----分页 Flask URL和视图

Python3实用编程技巧进阶 学习 教程

匿名 (未验证) 提交于 2019-12-02 22:51:30
Python3实用编程技巧进阶 学习 教程 1.1.如何在列表中根据条件筛选数据 # 1.1.如何在列表中根据条件筛选数据 data = [-1, 2, 3, -4, 5] #筛选出data列表中大于等于零的数据 #第一种方法,不推荐 res1 = [] for x in data: if x >= 0: res1.append(x) print(res1) #第二种用列表解析,推荐使用 res2 = [ x for x in data if x >= 0] print(res2) #第三种用filter函数 res3 = list(filter(lambda x : x>= 0,data)) print(res3) 1.2.如何在字典中根据条件筛选数据 # 1.2.如何在字典中根据条件筛选数据 from random import randint #创建学生字典,学号为1~20,分数为50~100随机 d = {'student%d'% i: randint(50,100) for i in range(1,21)} print(d) #过滤出分数为90的学生字典 #第一种方法 d1 = {k:v for k,v in d.items() if v >= 90} print(d1) #第二种方法 d2 = dict(filter(lambda item:item[1] >= 90

面向对象编程技巧总结

假装没事ソ 提交于 2019-12-02 19:40:43
1、面向对象分析:   1-1:理解应用场景   1-2:将场景的分类,并抽离出对象模型   1-3:分析每个对象的属性和行为   1-4:模拟或描述对象之间怎么交互   1-4:设计出算法    来源: https://www.cnblogs.com/dcli-blog/p/11761098.html

SQL编程技巧

不羁岁月 提交于 2019-12-02 16:32:45
SQL编程技巧 转至元数据结尾 被贾海伟添加,被贾海伟最后更新于十二月 29, 2015 (查看更改) 转至元数据起始 1、SQL尽量采用标准SQL,有利于移植。 比如Oracle中,CUD操作支持给表加别名,但是mysql中不支持。 如果数据库从oracle迁移到mysql,则需要修改SQL。 2、在写SQL的时候,采用可读性好的格式。 例如:1行表示一个项目,SQL关键字保持在同一列,非SQL关键字缩进 SELECT COUNT(1) FROM T_AUTH_USER WHERE LOGIN_NAME = #{userName} AND XXX = YYY GROUP BY AAA, BBB ORDER BY CCC, EEE 3、给查询频率高的表添加索引,提供查询效率。 4、能用一条SQL完成的,不用两条SQL完成。 5、能用两条或多条SQL完成的,不用带游标的存储过程。 6、能用带游标的存储过程完成的,不用JAVA实现。 7、大表查询不用in/not in,用exists/not exists代替。 8、大表清空数据,采用truncate代替delete。 9、限制工作数据集的大小,过滤掉一切不必要的数据。 10、只选择你需要的字段,杜绝使用select *查询。 11、杜绝使用select count(*),使用select count(1) 代替。 12

15个提高编程技巧的JavaScript工具

空扰寡人 提交于 2019-12-02 16:20:38
JavaScript脚本库是一个预先用JavaScript语言写好的库,它方便了我们开发基于JavaScript的应用程序,特别适合AJAX和其他一些以Web为中心的技术。JavaScript主要用于编写嵌入或者包含在HTML页面的函数,从而实现DOM之间的交互。 这篇文章收集了15个可用于提高编程技巧的JavaScript工具,助你轻松快速完成工作。下面的这些JavaScript工具能让你管理Javascript状态、压缩JavaScript代码、重构脚本代码结构等等。真诚地希望以下这些工具能对你有用。并且如果你还知道其他的JavaScript工具,欢迎不吝赐教。 1. JavaScript State Manager JavaScript State Manager是一种轻量级的、易于使用的状态管理器,主要用于响应式网站。它不需要任何的JavaScript框架。你可以定义断点将运行在当前断点的JavaScript代码打包在一起。 官方网站:http://www.simplestatemanager.com/ 2. jsMini 如果你想快速、轻松地压缩JavaScript或jQuery文件,那么可以使用jsMini。只需复制粘贴源代码,选择是否要基本或完全压缩,然后就ok了。 官方网站:http://www.jsmini.com/ 3. CountUp.js CountUp