The iPhone wasn't designed from scratch to print things, but it can be done. I've reviewed some solutions in the past, including one that required you to run a small print server on your computer, which then directs your print jobs to any local printers. There are also some apps that print photos directly to printers.
I've just tried ePrint, which has some limitations, but gets the job done without any print servers. There are two versions of the app: The free version, ePrint Free [iTunes link] lets you print contacts, notes (more on that later), photo albums, and even brings up the camera so you can fire off a snapshot and print it immediately. The paid version [iTunes link], meanwhile, is U.S. $2.99 and adds the ability to print web pages as well
Setting up is easy. The app will find your printers in a snap if your phone is in Wi-Fi mode, and you are running Bonjour zero configuration setup on your network. You can also elect to enter the IP addresses of your printers as well. If your printer is color, and you send color images, you'll get them in color.
There are a few catches, however. To print a web page you either have to enter a URL for it in ePrint, or set a preference to bring up the last web page viewed. When you go to print notes in either app, it doesn't mean from your Notes app. ePrint can only print from the ePrint Notes app, although you can still copy and paste any text into it and print away. That's how I test-printed an email, because Apple doesn't allow any way to print an email or anything else directly. After doing a 'select all' on an email, I copied and pasted it into the ePrint Notes app, and it worked just fine.